《剑指offer》c++版本 12. 矩阵中的路径
生活随笔
收集整理的這篇文章主要介紹了
《剑指offer》c++版本 12. 矩阵中的路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如題,牛客網上題目沒有圖示,下圖是從原書中截圖得到的。
本題就是從數組中按照指定方向查找字符序列,典型的回溯行為,找到當前字符,繼續查找該字符上下左右四個方向,找不到,返回上一個字符,重新查找。題目要求,路徑中不能訪問同一個字符,可以創建一個等大小的bool二維數組,記錄已訪問的點,每次訪問一個點,置標志位,注意。如果該點的后一個結點不符合,再返回上一個節點前,需要去掉該標志位。
使用遞歸進行回溯處理即可,注意特殊情況處理,例如,字符串數組為空或者給定的字符串為空等。
下面是本題c++代碼,在牛客網上的劍指offer板塊驗證完成,僅供參考:
//遞歸查找路徑,找到直接返回,找不到順時針換方向查找 //查找的時候,將訪問的結點置位。 //特殊情況:str為空或者字符數組為空。 class Solution { public:bool searchPath(char* matrix, int rows, int cols, char* str, int prow, int pcol, vector<vector<bool>> &visited){char *pChar = str;//如果已經到了字符串末尾,則返回trueif (*pChar == '\0')return true;//判斷是否超出邊界if (prow < 0 || prow >= rows || pcol < 0 || pcol >= cols)return false;cout<<"["<<prow<<"]["<<pcol<<"]"<<endl;//判斷是否該點已經訪問過if (visited[prow][pcol])return false;//判斷該點是否為所需字符if (matrix[prow*cols+pcol] == *pChar){//設置標志位,指向下一個字符visited[prow][pcol] = true;pChar++;//上if (searchPath(matrix, rows, cols, pChar, prow-1, pcol, visited))return true;//左if (searchPath(matrix, rows, cols, pChar, prow, pcol-1, visited))return true;//下if (searchPath(matrix, rows, cols, pChar, prow+1, pcol, visited))return true; //右if (searchPath(matrix, rows, cols, pChar, prow, pcol+1, visited))return true; //本點不符合,去掉置位visited[prow][pcol] = false;}elsereturn false;return false;}bool hasPath(char* matrix, int rows, int cols, char* str){int i = 0, j = 0;vector<vector<bool>> visited(rows, vector<bool>(cols, false)), &rVisited = visited;//特殊情況處理if (matrix == nullptr || str == nullptr || (rows == 0 && cols == 0))return false;//搜索路徑for (; i < rows; i++){for (j = 0; j < cols; j++){if (matrix[i*cols+j] == *str && searchPath(matrix, rows, cols, str, i, j, rVisited))return true;}}return false;} };=============================================================================================
Linux應用程序、內核、驅動、后臺開發交流討論群(745510310),感興趣的同學可以加群討論、交流、資料查找等,前進的道路上,你不是一個人奧^_^。
總結
以上是生活随笔為你收集整理的《剑指offer》c++版本 12. 矩阵中的路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《剑指offer》c++版本 11. 旋
- 下一篇: 《剑指offer》c++版本 13. 机