牛客:迷宮最短路線問題
struct node
int _x;
int _y;};
bool
bfs(vectorint>> graph,
int startx,
int starty,
int destx,
int desty),,
,};//標記是否可以走出去
bool flag =
false
;while
(!q.
empty()
)//如果新的位置是目標位置,結束查詢
if(newx == destx && newy == desty)
//否則新位置有障礙,或者新位置已經走過,繼續迴圈下乙個位置
}//當前位置的四個方向都進行了尋找,如果找到了結束,找到的路徑一定是最短路徑
//如果沒有找到以四個方向的新節點為起點開始新的一輪尋找
if(flag ==
true
)break
; q.
pop();
}//最後只需要返回 flag 就可以知道是否走出迷宮
return flag;
}
力扣:員工重要性
class
solution
//用乙個佇列,計算當前員工時將該員工的下屬(id)都新增到佇列中
queue<
int> q;
q.push
(id)
;//返回值:當前員工和他下屬的重要度之和
int result =0;
//佇列不為空,說明依舊有下屬的重要度沒有計算完畢
while
(!q.
empty()
)//新增完下屬員工後,從佇列中將當前員工刪除(已經計算完畢)
q.pop();
}return result;}}
;
力扣:n 叉樹的層序遍歷
class
solution
//刪除
q.pop();
}//迴圈結束後: v 儲存的是一行的結果,q 中將上一行的元素全部刪除,q 中儲存的是新的一行的所有節點
result.
push_back
(v);
v.clear()
;//清空
}return result;}}
;
力扣:腐爛的橘子
class
solution
}//step 記錄擴散的步數,從-1開始,因為即使不需要擴散下面對step仍然進行了一次++操作
//但是如果並沒有橘子,下面將不會進行++操作,也就是說step最終為-1的情況就是沒有橘子的情況
//沒有橘子的情況step應該為0,只需要最終進行處理
int step =-1
;//四個方向
int nextpos[4]
[2]=
,,,}
;while
(!q.
empty()
)}//當前位置的四個方向都被感染
q.pop();
}//所有腐爛橘子都進行了一次感染,step++
step++
;//此時佇列中的橘子都是新腐爛的橘子,舊腐爛的都已刪除
}//最後迴圈查詢,有沒有感染不到的橘子,有返回 -1
for(
int i =
0; i < row;
++i)
}return step <0?
0: step;}}
;
力扣:單詞接龍
class
solution}}
//進行了一次轉換,轉換一次後得到的字串如果匹配到了字典中,就會將這個字串新增到佇列中
//這就是一次的轉換得到的所有可能結果
//在利用這些結果進行下一次轉換
result +=1
;}//轉換不成功
return0;
}};
力扣:最小基因變化
class
solution
;
queue q;
//初始化
q.push
(start)
; visits.
insert
(start)
;int step =0;
while
(!q.
empty()
)}}}
//一次 while 迴圈結束意味著,當前步驟的所有基因序列都處理完畢
step++;}
//轉換失敗
return-1
;}};
力扣:開啟轉盤鎖
class
solution
newnum2[i]
= newnum2[i]
=='9'
?'0'
: newnum2[i]+1
;if(!deadends.
count
(newnum2)
&&!visits.
count
(newnum2))}
} step++;}
return-1
;}};
BFS廣度優先搜尋
廣度優先搜尋,利用佇列實現,結束標誌是隊列為空的時候 承接dfs的演算法實現的講例,對於迷宮問題我們也可以採取廣度優先搜尋實現 include iostream include cstdio include cstdlib using namespace std int map 55 55 int ...
bfs廣度優先搜尋
這一課我們來學習圖的另一種遍歷方法 廣度優先搜尋 breadth first search,簡稱 bfs 這是一種連通圖的常用遍歷策略,通常用於求起點到各點的最短路徑,以及求兩點之間的最優路徑等問題。首先我們先來看看廣度優先搜尋的具體方法吧 對於乙個連通圖,我們假設一開始所有頂點均未被訪問,廣度優先...
廣度優先搜尋bfs
bfs即廣度優先搜尋演算法,其是搜尋演算法中的一種。1.dfs常用於尋找是否存在解 其從a節點出發,選取乙個臨近點b,然後不斷深入,在搜尋完b的下屬節點 ehif 後,回到a再搜尋臨近a的c節點,以此類推。2.bfs則用於在最短的時間或最少的移動距離內找到解 其往往從a節點出發,搜尋周圍所有的圍繞節...