LeetCode-1030. 距離順序排列矩陣單元格
阿新 • • 發佈:2020-11-17
記錄下錯誤,迭代器可能會在對應容器大小變化時失效
思路為BFS
vector拿來當佇列使用,一開始沒初始化大小,故而迭代器it(隊頭)可能會在res.push_back後失效
原因應該是vector的size變大後,不得不放棄之前的記憶體,重新找了一塊更大的記憶體來儲存,地址變化了
vector初始化的語法為
vector<vector<int>> res(大小,初始值); //故而二維的初始化就是 vector<vector<int>> res(所包含的一維陣列的個數, vector<int>(其中每一個一維陣列的長度, 初始值)); //二維vector的size是其中一維陣列的個數,其中每一個一維的vector也同樣有個size //高維的以此類推
初始化後,就不可以push_back了,必須直接對已有的值進行修改
class Solution { public: vector<vector<int>> allCellsDistOrder(int R, int C, int r0, int c0) { vector<vector<int>> res(R*C, vector<int>(2, 0));//第一個引數可以填變數我是驚喜一波 int move[4][2] = { {0,1},{0,-1},{1,0},{-1,0} };//四個動作 bool* visit = new bool[R * C]{ 0 };//初始化 int cnt=0; res[cnt][0] = r0; res[cnt++][1] = c0; visit[r0 * C + c0] = true; vector<vector<int>>::iterator it = res.begin(); for (; it != res.end(); it++) { for (int i = 0; i < 4; i++) { int xnext = (*it)[0] + move[i][0]; int ynext = (*it)[1] + move[i][1]; if (xnext < R && xnext >= 0 && ynext < C && ynext >= 0 && !visit[xnext * C + ynext]) { res[cnt][0] = xnext; res[cnt++][1] = ynext; visit[xnext * C + ynext] = true; } } } return res; } };