1. 程式人生 > 其它 >演算法-深度優先遍歷(影象渲染)

演算法-深度優先遍歷(影象渲染)

733. 影象渲染

有一幅以 m x n 的二維整數陣列表示的圖畫 image ,其中 image[i][j] 表示該圖畫的畫素值大小。

你也被給予三個整數 sr ,  sc 和 newColor 。你應該從畫素 image[sr][sc] 開始對影象進行 上色填充 。

為了完成 上色工作 ,從初始畫素開始,記錄初始座標的 上下左右四個方向上 畫素值與初始座標相同的相連畫素點,接著再記錄這四個方向上符合條件的畫素點與他們對應 四個方向上 畫素值與初始座標相同的相連畫素點,……,重複該過程。將所有有記錄的畫素點的顏色值改為 newColor 。

最後返回 經過上色渲染後的影象 

 

示例 1:

輸入: image = [[1,1,1],[1,1,0],[1,0,1]],sr = 1, sc = 1, newColor = 2
輸出: [[2,2,2],[2,2,0],[2,0,1]]
解析: 在影象的正中間,(座標(sr,sc)=(1,1)),在路徑上所有符合條件的畫素點的顏色都被更改成2。
注意,右下角的畫素沒有更改為2,因為它不是在上下左右四個方向上與初始點相連的畫素點。

示例 2:

輸入: image = [[0,0,0],[0,0,0]], sr = 0, sc = 0, newColor = 2
輸出: [[2,2,2],[2,2,2]]
 1 
//這兩個陣列可以實現上下左右移動
const int
dx[4] = {1,0,0,-1}; 2 const int dy[4] = {0,1,-1,0}; 3 int n; 4 int m; 5 void dfs(int **imag,int x,int y,int color,int newcolor){ 6 int mx,my,i; 7 if(imag[x][y]==color) 8 {imag[x][y] = newcolor;//相當於if (visit【x】【y】==0)visit【x】【y】= 1; 9 for(i = 0;i<4;i++) 10 { mx = x+dx[i]; 11 my = y+dy[i];
12 if(mx>=0&&mx<n&&my>=0&&my<m)//my要小於m 13 dfs(imag,mx,my,color,newcolor);//運用遞迴實現dfs 14 } 15 }} 16 int** floodFill(int** image, int imageSize, int* imageColSize, int sr, int sc, int newColor, 17 int* returnSize, int** returnColumnSizes){ 18 n = imageSize, m = imageColSize[0]; 19 *returnSize = n; 20 *returnColumnSizes = malloc ( sizeof ( int ) * n );//如果不開闢空間將會出錯 21 for (int i = 0; i < n; i++) { 22 (*returnColumnSizes)[i] = m; 23 } 24 int currColor = image[sr][sc]; 25 if (currColor != newColor) { 26 dfs(image, sr, sc, currColor, newColor); 27 } 28 return image; 29 }

深度優先遍歷的步驟我大致已經理解了 但還是不明白imagecolsize和returncolumnsize是幹嘛用的