SDUT2138圖結構練習——BFSDFS——判斷可達性
阿新 • • 發佈:2019-01-09
圖結構練習——BFSDFS——判斷可達性
Time Limit: 1000MS Memory limit: 65536K
題目描述
在古老的魔獸傳說中,有兩個軍團,一個叫天災,一個叫近衛。在他們所在的地域,有n個隘口,編號為1..n,某些隘口之間是有通道連線的。其中近衛軍團在1號隘口,天災軍團在n號隘口。某一天,天災軍團的領袖巫妖王決定派兵攻打近衛軍團,天災軍團的部隊如此龐大,甚至可以填江過河。但是巫妖王不想付出不必要的代價,他想知道在不修建任何通道的前提下,部隊是否可以通過隘口及其相關通道到達近衛軍團展開攻擊。由於n的值比較大(n<=1000),於是巫妖王找到了擅長程式設計的你 =_=,請你幫他解決這個問題,否則就把你吃掉變成他的魔法。為了拯救自己,趕緊想辦法吧。輸入
輸出
如果天災軍團可以不修建任何通道就到達1號隘口,那麼輸出YES,否則輸出NO。示例輸入
2 1 1 2 2 1 2 1
示例輸出
NO YES
#include <bits/stdc++.h> using namespace std; int Map[1001][1001]; int vis[1001]; int Now[1001]; int n,m; int BFS(int k) { memset(vis,0,sizeof(vis)); memset(Now,0,sizeof(Now)); int ss,ee,flag=0; ss=ee=0; Now[ss++]=k; vis[k]=1; while(ss>ee) { int now=Now[ee++]; for(int i=n;i>=1;i--) { if(Map[now][i]==1&&vis[i]==0) { Now[ss++]=i; vis[i]=1; if(i==1) { flag=1; break; } else flag=0; } } if(flag==1) break; } if(flag==1) printf("YES\n"); else printf("NO\n"); } int main() { int u,v; while(~scanf("%d %d",&n,&m)) { memset(Map,0,sizeof(Map)); for(int i=0;i<m;i++) { scanf("%d %d",&u,&v); Map[u][v]=1; } BFS(n); } }