面試題12:矩陣中的路徑
//上下左右遞迴,在看邊界條件
#include#includeusing namespace std;
//遞迴
bool haspathcore( char* m, int row, int col, int i, int j, const char* str, int& pathlen, bool* vis)
bool haspath = false;
if (i >= 0 && i < row && j >= 0 && j < col && m[i*col + j] == str[pathlen] && !vis[i*col + col]) }
return haspath;
}//主遍歷
bool haspath( char* m, int row, int col, const char* str)
bool *vis = new bool[row*col];
memset(vis, 0, row*col);
int pathlen = 0;
for (int i = 0; i < row; i++)
} }
return false;}
int main()
面試題13:機械人的運動範圍
思路:可以向上下左右移動 則遞迴(i+1,j),(i-1,j),(i,j+1),(i,j-1)
不能進入行列的數字之和相加》18 判斷條件 i+j<18 而且沒有訪問過 !vis
得到行列之和 35 3行5列 3+5
#includeusing namespace std;
//得到行列數字之和
int getdigitsum(int num)
return sum;
}//檢查判斷條件
bool check(int threshold, int row, int col, int i, int j, bool* vis)
return false;
}//遞迴
int movingcountcore(int threshold, int row, int col, int i, int j, bool* vis)
return count;
}//總的遍歷
int movingcount(int threshold, int row, int col)
bool* vis = new bool[row*col];
for (int i = 0; i < row*col; i++)
int count = movingcountcore(threshold, row, col, 0, 0, vis);
delete vis;
return count;
}int main()
劍指offer 回溯法
題目描述 請設計乙個函式,用來判斷在乙個矩陣中是否存在一條包含某字串所有字元的路徑。路徑可以從矩陣中的任意乙個格仔開始,每一步可以在矩陣中向左,向右,向上,向下移動乙個格仔。如果一條路徑經過了矩陣中的某乙個格仔,則該路徑不能再進入該格仔。例如 矩陣中包含一條字串 bcced 的路徑,但是矩陣中不包含...
劍指offer 回溯法總結
面試題12 13是接連的兩道回溯法的題。先上定義 回溯法的基本行為是搜尋,搜尋過程使用剪枝函式來為了避免無效的搜尋。剪枝函式包括兩類 1.使用約束函式,剪去不滿足約束條件的路徑 2.使用限界函式,剪去不能得到最優解的路徑。回溯法說白了就是遞迴,遞迴法演算法簡潔且執行效率高,但是與之相應的就是遞迴法一...
劍指offer 學習筆記 回溯法
回溯法可以看成蠻力法的公升級版,它從解決問題的每一步的所有可能選項裡系統地選擇乙個可行的解決方案。回溯法適合由多個步驟組成的問題,並且每個步驟有多個選項。用回溯法解決的問題的所有選項可以用樹狀結構形象地表示,在某一步有n個可能的選項,那麼該步驟可以看做樹狀結構中的乙個節點,每個選項看成樹中節點連線線...