ペイントアルゴリズム

画像とかで同色のクラスターを塗る方法として定番な方法。

void Paint( Color** ppImage, int x, int y, Color BaseColor, Color PaintColor ){
	if( ppImage[x][y] == BaseColor ){
		ppImage[x][y] = PaintColor;
		Paint( ppImage, x - 1, y, BaseColor, PaintColor );
		Paint( ppImage, x + 1, y, BaseColor, PaintColor );
		Paint( ppImage, x, y - 1, BaseColor, PaintColor );
		Paint( ppImage, x, y + 1, BaseColor, PaintColor );
	}
}

このように再帰関数を使えば簡単にできる。応用例として障害物のある系での最短距離を求める方法や迷路を解く方法など多岐にわたる。
さて、現在ボクセルにて同じことをやろうとして3Dに拡張したのだがうまくいかなかった。や、うまくいかなかったわけではないけど現実的な方法でなくなった。さてなぜでしょうか?
スタックオーバーフローを起こしたorz 実はそれだけ(^^;

折角だからVisualStudioでスタック領域を広げる方法を記載すると、プロジェクト→プロパティ でダイアログを開いて、構成プロパティ→リンカ→システム で、スタックのサイズの設定のところに馬鹿でかい数値を入れればOK

ただしこれでも根本的解決にはなっていない。下手したら全ピクセル分の長さ分スタックに積むのだからそもそもスタックどころかメインメモリが足りなくなる。のでアルゴリズムそのものを見直す必要がある。