我試圖做一個算法,可以在c#中填充int數組。基本上,作爲MS Paint中的填充工具,我有一個顏色,如果我選擇數組中的(x,y)座標,它將用新顏色替換具有相同初始顏色的所有鄰居。洪水填充遞歸算法
例:
[0,0,0]
[0,1,0]
[1,1,0]
如果我在(0,0)放3,排列成爲
[3,3,3]
[3,1,3]
[1,1,3]
所以我想它在遞歸和它的工作,但不是所有的時間。實際上,我有時會出現「堆棧溢出」錯誤(似乎是合適的)。 這裏是我的代碼,這將是巨大的,如果你能告訴我什麼是錯的:)
public int[,] fill(int[,] array, int x, int y, int initialInt, int newInt)
{
if (array[x, y] == initialInt)
{
array[x, y] = newInt;
if (x < array.GetLength(0) - 1)
array = fill(array, (x + 1), y, initialInt, newInt);
if (x > 0)
array = fill(array, (x - 1), y, initialInt, newInt);
if (y < array.GetLength(1) - 1)
array = fill(array, x, (y + 1), initialInt, newInt);
if (y > 0)
array = fill(array, x, (y - 1), initialInt, newInt);
}
return array;
}
謝謝!
是啊......那是一大堆遞歸調用。可能最好以程序化的方式在C#這樣的語言中完成此操作,但不保證尾部調用優化(不是說您的當前代碼會從中受益) –
不錯 - >「堆棧溢出」 – Justas