bfs 單向公路 C

2022-05-11 16:55:21 字數 1254 閱讀 9220

描述

某地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,並且有的公路並不能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙個城鎮。(我們規定,城鎮自己跟自己可互相到達,即 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"

Swust OJ 85 單向公路 BFS

time limit ms 5000 memory limit kb 65535 description 某個地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,且有公路的並不都能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙...

DFS BFS 公路搜尋 單向公路 OJ1107

參考部落格 題目描述 某個地區有許多城鎮,但並不是每個城鎮都跟其他城鎮有公路連線,且有公路的並不都能雙向行駛。現在我們把這些城鎮間的公路分布及允許的行駛方向告訴你,你需要程式設計解決通過公路是否可以從乙個城鎮到達另乙個城鎮。我們規定,城鎮自己跟自己可互相到達,即a可到達a 輸入要求 第一行只有乙個數...

C 單向鍊錶

單向鍊錶 鍊錶的功能包括 向尾節點新增資料,遍歷鍊錶中的節點,在鍊錶結束時釋放所有節點 class cnode 定義乙個節點類 class csllist 定義鍊錶類csllist類 csllist m nodesum 0 pdelete null ptmp null m pheader null ...