我有幾個關於從McDowell執行paintFill函數(類似於圖像編輯程序)的代碼的問題。執行paintFill函數
1-爲什麼我們使用排序屏幕[y] [x]而不是屏幕[x] [y]?作者說這是圖形問題的特徵,但爲什麼?
2-作者將此方法與深度優先方法進行比較,並表示它可能會很快溢出堆棧。另一種選擇是實施廣度優先搜索的變體。它不是已經是BFS的方法嗎?由於對於每個像素,我們在向外看像素之前先着色相鄰像素?如果不是,那麼bfs方法的想法是什麼?爲什麼它不會溢出?
enum Color{
Black, White, Red, Yellow, Green
}
boolean paintFill(Color[][] screen, int x, int y, Color ocolor, Color ncolor){
if (x < 0 || x >= screen[0].length||
y < 0 || y >= screen.length){
return false;
}
if (screen[y][x] == ocolor){
screen[y][x] = ncolor;
paintFill(screen, x-1, y, ocolor, ncolor);
paintFill(screen, x+1, y, ocolor, ncolor);
paintFill(screen, x, y-1, ocolor, ncolor);
paintFill(screen, x, y+1, ocolor, ncolor);
}
return true;
}
boolean paintFill(Color[][] screen, int x, int y, Color ncolor){
if (screen[y][x] == ncolor){
return false;
}
return paintFill(screen, x, y, screen[y][x], ncolor);
}