描述
某地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,並且有的公路並不能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙個城鎮。(我們規定,城鎮自己跟自己可互相到達,即 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。
輸入樣例 1
34 1 2 3
3 4 5
3 5 8
1 21 8
4 8輸出樣例 1
yesno
yes
這道題採用的是bfs,不懂的看這裡
讀完題目,不難發現就是乙個有向圖裡的判斷是否連通。那麼就採用廣搜,每次的起點和終點分別是詢問的起始點和終止點,注意每次搜尋之前要清空vis陣列與佇列!
坑點:題目沒說編號分別從1-n,所以要在輸入的時候記錄最大的編號以便於搜尋(懶得開陣列記錄)
其他的基本就是最最普通的bfs模板,主要就是練習打bfs的熟練度。。總體來說是一道很好的bfs入門題目!
#includeusing namespace std;
bool g[1001][1001];
bool vis[1001];
int n,a,b,num,maxi=-1;
void init()
}queueq;
void qinit()
}bool bfs(int a,int b)
}} q.pop();
} return false;
}int main()
} for(int i=1;i<=n;i++)
{ cin>>a>>b;
if(bfs(a,b))cout<<"yes" time limit ms 5000 memory limit kb 65535 description 某個地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,且有公路的並不都能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙... 參考部落格 題目描述 某個地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,且有公路的並不都能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙個城鎮。我們規定,城鎮自己跟自己可互相到達,即a可到達a 輸入要求 第一行只有乙個數... 單向鍊錶 鍊錶的功能包括 向尾節點新增資料,遍歷鍊錶中的節點,在鍊錶結束時釋放所有節點 class cnode 定義乙個節點類 class csllist 定義鍊錶類csllist類 csllist m nodesum 0 pdelete null ptmp null m pheader null ...Swust OJ 85 單向公路 BFS
DFS BFS 公路搜尋 單向公路 OJ1107
C 單向鍊錶