較為典型的有求最短步數,最少次數,最短時間等等。
洛谷 p1135\2895…
void
bfs(para1,..
...)
if(滿足入隊條件)}}
}
常見的有回溯法,染色法,以及遍歷。
以回溯法為例。染色的時候就不用取消標記了。
常見的:求連通塊數量,求小島面積,求路徑數量等。
void
dfs(para1,..
...)
vis=
1//標記
for(對所有相鄰節點遍歷dfs)
vis=
0//撤銷標記
}
前序遍歷對應dfs。層次遍歷對應bfs。
已知前序和中序,求出後序遍歷。
(或已知中序和後序,求前序)
前序的第乙個節點是整棵樹的根節點。
根節點又把中序分為左子樹的中序,和右子樹的中序。
前序也可以分為左子樹的前序和右子樹的前序。
而後序的最後乙個節點也是整棵樹的根節點。
所以遞迴就可以解決。
void
backtopreorder
(string s1, string s2)
if(s1.
size()
==1)int l = s2.
size()
;int index = s1.
find
(s2[l -1]
);cout << s2[l -1]
; string ls1 = s1.
substr(0
, index)
; string rs1 = s1.
substr
(index +1)
; string ls2 = s2.
substr(0
, ls1.
size()
);string rs2 = s2.
substr
(ls1.
size()
,rs1.
size()
);backtopreorder
(ls1, ls2)
;backtopreorder
(rs1, rs2);}
void
backtopostorder
(string s1, string s2)
if(s1.
size()
==1)int index = s2.
find
(s1[0]
);string ls2 = s2.
substr(0
, index)
; string rs2 = s2.
substr
(index +1)
; string ls1 = s1.
substr(1
, ls2.
size()
);string rs1 = s1.
substr
(ls2.
size()
+1, rs2.
size()
);backtopostorder
(ls1, ls2)
;//求左子樹的後序遍歷
backtopostorder
(rs1, rs2)
;//求右子樹的後序遍歷
cout << s1[0]
;//根節點
}
LeeCode刷題筆記 1
1.twosum 從今天開始好好刷題吧 此題用雜湊表即可求解,依題意不必在雜湊表建好之後進行尋找,而是在建表的同時進行尋找 這裡使用了乙個庫 注意即使題目說明了一定會有解,但是函式中還是要在無解的情況下返回乙個值 我的測試 如下 include include includeusing namesp...
Codewars刷題筆記(1)
描述 取2個字串s1,s2僅包含從a到的字母z。返回乙個新的排序字串,最長的字串,包含不同的字母,每個僅取一次 來自s1或s2。例子 a xyaabbbccccdefww b xyyyyabklmopq longest a,b abcdefklmopqwxy a abcdefghijklmnopqr...
LeetCode刷題筆記1
for迴圈新用法,題目217 2.map和unordered map 有序和無序的區別,無序更快,題目 217 而c 標準庫的hashmap其實叫作std unordered map,其增加和查詢的時間複雜度才是 o 1 o 1 o 1 它提供了類似map的方法。在c 11下直接使用標頭檔案 inc...