參考部落格
題目描述
某個地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,且有公路的並不都能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙個城鎮。(我們規定,城鎮自己跟自己可互相到達,即a可到達a).
輸入要求
第一行只有乙個數n,下面將跟著2n行資料. 在前n行資料中,對於每行資料,最開頭乙個數字number,表明這一行總共有number個數,number的下乙個數為i,代表編號為i的那個城鎮.這行餘下的就是跟i有公路連線的城鎮的名單,且只能從城鎮i駛向其他城鎮。如 4 1 2 3,表明:此行有4個數,跟城鎮1有公路連線的城鎮是編號為2和3的城鎮,且只允許從城鎮1駛向城鎮2和3,而不能從2到1或3到1。 在後n行資料中,每行由兩個數字組成a,b. 對於每個輸入的數有如下關係 0 <= input_number <= 1000 .
輸出要求
對於輸入資料中的每個a,b,判斷是否可以從城鎮a通過公路到達城鎮b,如果可以,輸出yes;否則輸出no.
輸入樣例
4 1 2 3
3 4 5
3 5 8
1 21 8
4 8輸出樣例
yesnoyes
思路分析
典型的dfs(深度優先搜尋)、bfs(廣度優先搜尋)問題,涉及有關知識點:佇列、圖。
解決方式
1.dfs
2.bfs
圖的概念:圖/13018767#viewpagecontent
佇列的概念:佇列/14580481?fr=aladdin
搜尋演算法:搜尋演算法/2988274?fr=aladdin
c++中佇列的使用和實現:
dfs與bfs詳解(兩種搜尋的模板寫的很好):
ac**
1.dfs
#include#include#define max 1010
int vis[max];//記錄走過的城鎮,如果為0則表示沒走過,為1表示走過,初始為0
int roadmap[max][max];//用二維陣列的形式記錄由乙個城鎮能到達的其他城鎮的編號
int len[max];//每個城鎮能到達其他城鎮的數量(用於節省時間)
int flag;//判斷是否能到達目的地
int bg,ed;//深搜起始點和終止點。
void dfs(int bg)
for(i = 0; i < len[bg]; i++)
}}int main()
}for(i = 0; i < n; i++)
return 0;
}
2.bfs
#include#include#include#define max 1010
using namespace std;
int vis[max];//記錄走過的城鎮,如果為0則表示沒走過,為1表示走過,初始為0
int roadmap[max][max];//用二維陣列的形式記錄由乙個城鎮能到達的其他城鎮的編號
int len[max];//每個城鎮能到達其他城鎮的數量(用於節省時間)
int flag;//判斷是否能到達目的地
int bg,ed;//廣度搜尋的起始點和終止點。
queueque;//佇列定義
void bfs()
for(int i = 0; i < len[fir]; i++)}}
}int main()
}for(i = 0; i < n; i++)
return 0;
}
總結及錯誤分析
bfs與dfs需要的準備工作:
1.用陣列形式儲存相關圖(map)
2.用乙個陣列(vis)記錄已經訪問過的節點
(3.可用乙個額外陣列(len)記錄元素個數節省時間)
錯誤分析:
1.沒用vis陣列正確記錄訪問情況,導致超時和結果錯誤。
2.對於多組資料的vis以及flag等標誌資料的初始化工作
bfs 單向公路 C
描述 某地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,並且有的公路並不能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙個城鎮。我們規定,城鎮自己跟自己可互相到達,即 a 可到達 a 輸入第一行只有乙個數 n 下面將跟著 ...
DFS BFS搜尋 題目
這篇博主寫的是圖的深搜 圖的dfs附 圖的深度優先遍歷 出處 一條魚 2011 12 26 include include struct node 圖頂點結構定義 typedef struct node graph 圖形的結構新型態 struct node head 9 圖形頂點陣列 int vis...
DFS BFS 搜尋訓練
hdu 1016 include include include using namespace std int prime 40 vis 40 num 40 n void checkprime void dfs int i for int c 2 c n c int main return 0 p...