日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu1269迷宫城堡(判断有向图是否是一个强连通图)

發布時間:2025/3/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu1269迷宫城堡(判断有向图是否是一个强连通图) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1
/*
題意: 給你一個圖,求這個有向圖示否是一個強連通圖(每兩個節點都是可以相互到達的)!
思路1:按正向邊dfs一遍,將經過的節點計數,如果記錄的節點的個數小于n,那么就說明圖按照正向邊就不是連同的,所以就不是強連通圖!
然后按照反向邊再進行另一個dfs,同樣對經過的節點的個數進行計數,如果個數==n則說明正向遍歷和反響遍歷都是連通的!那么整個圖就是強連通的圖!

思路2:直接套用tarjan算法,求出每一個節點所對應的縮點的值, 如果縮點的個數==1,那么證明就會只有一個強連通分量!也就是強連通圖

思路3:多次次調用tarjan算法,判斷low[u]==pre[u]&&u==1, 如果不滿足說明改圖有多個縮點,那就不是強連通圖!下圖說明一下....
? ? ? ? ? ? ? ? ?

*/
//思路一:
2 #include<iostream> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 #include<vector> 7 #define N 10005 8 using namespace std; 9 10 vector<int>uv[N]; 11 vector<int>vu[N]; 12 13 int vis[N]; 14 15 int cnt; 16 17 int n, m; 18 19 void dfs1(int u){ 20 vis[u]=1; 21 ++cnt; 22 int len=uv[u].size(); 23 for(int i=0; i<len; ++i){ 24 int v=uv[u][i]; 25 if(!vis[v]) 26 dfs1(v); 27 } 28 } 29 30 31 void dfs2(int v){ 32 vis[v]=1; 33 ++cnt; 34 int len=vu[v].size(); 35 for(int i=0; i<len; ++i){ 36 int u=vu[v][i]; 37 if(!vis[u]) 38 dfs2(u); 39 } 40 } 41 42 int main(){ 43 while( scanf("%d%d", &n, &m) && (n||m) ){ 44 memset(vis, 0, sizeof(vis)); 45 for(int i=1; i<=n; ++i){ 46 uv[i].clear(); 47 vu[i].clear(); 48 } 49 while(m--){ 50 int u, v; 51 scanf("%d%d", &u, &v); 52 uv[u].push_back(v); 53 vu[v].push_back(u); 54 } 55 cnt=0; 56 dfs1(1); 57 58 if(cnt==n){ 59 memset(vis, 0, sizeof(vis)); 60 cnt=0; 61 dfs2(1); 62 if(cnt!=n) 63 printf("No\n"); 64 else printf("Yes\n"); 65 } 66 else printf("No\n"); 67 68 } 69 return 0; 70 } 71 //思路二:
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<vector>#include<stack>#define N 10005using namespace std;vector<int>g[N];stack<int>s; int pre[N], low[N];int scc[N];int scc_cnt;int dfs_clock;void tarjans(int u){pre[u]=low[u]=++dfs_clock;s.push(u);int len=g[u].size();for(int i=0; i<len; ++i){int v=g[u][i];if(pre[u]>pre[v]){if(!pre[v]){tarjans(v);low[u]=min(low[v], low[u]); }elselow[u]=min(pre[v], low[u]);} }if(low[u]==pre[u]){++scc_cnt;while(1){int x=s.top();s.pop();scc[x]=scc_cnt;if(x==u) break;}}}int n, m;int main(){while(scanf("%d%d", &n, &m) && (n||m)){while(m--){int u, v;scanf("%d%d", &u, &v);g[u].push_back(v); } dfs_clock=0;scc_cnt=0;for(int i=1; i<=n; ++i)if(!scc[i])tarjans(i);int i;for(i=2; i<=n; ++i)if(scc[i]!=scc[1]){printf("No\n");break;}if(i>n) printf("Yes\n");memset(pre, 0, sizeof(pre));memset(low, 0, sizeof(low));memset(scc, 0, sizeof(scc));for(i=1; i<=n; ++i)g[i].clear();}return 0; }

//思路三:
1
#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #include<vector> 6 #define N 10005 7 using namespace std; 8 9 vector<int>g[N]; 10 bool flag; 11 int pre[N], low[N]; 12 int dfs_clock; 13 14 void tarjans(int u){ 15 pre[u]=low[u]=++dfs_clock; 16 int len=g[u].size(); 17 for(int i=0; i<len; ++i){ 18 int v=g[u][i]; 19 if(!flag) return ; 20 if(pre[u]>pre[v]){ 21 if(!pre[v]){ 22 tarjans(v); 23 low[u]=min(low[v], low[u]); 24 } 25 else 26 low[u]=min(pre[v], low[u]); 27 } 28 } 29 30 if(low[u]==pre[u] && u!=1) 31 flag=false; 32 } 33 34 int n, m; 35 int main(){ 36 while(scanf("%d%d", &n, &m) && (n||m)){ 37 while(m--){ 38 int u, v; 39 scanf("%d%d", &u, &v); 40 g[u].push_back(v); 41 } 42 dfs_clock=0; 43 flag=true; 44 for(int i=1; i<=n; ++i) 45 if(!pre[i]){ 46 if(!flag) break; 47 tarjans(i); 48 } 49 50 if(!flag) printf("No\n"); 51 else printf("Yes\n"); 52 memset(pre, 0, sizeof(pre)); 53 memset(low, 0, sizeof(low)); 54 for(int i=1; i<=n; ++i) 55 g[i].clear(); 56 } 57 return 0; 58 } 59

?

?

轉載于:https://www.cnblogs.com/hujunzheng/p/3928056.html

總結

以上是生活随笔為你收集整理的hdu1269迷宫城堡(判断有向图是否是一个强连通图)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 狠狠干在线观看 | 久久天堂影院 | 伊人网国产 | 午夜小福利 | 成人激情社区 | av高潮 | 欧美视频网址 | 免费高清黄色 | 三级网站视频 | 无码成人精品区一级毛片 | 久久香焦 | 91欧美激情一区二区三区 | 久久综合婷婷 | 蜜桃91精品入口 | 日本一区二区免费高清视频 | 卡一卡二视频 | 国产一级淫片a视频免费观看 | 日韩电影福利 | 久久亚洲美女 | 大奶一区 | 一本大道久久a久久精二百 琪琪色在线视频 | 日韩精品一区二区三区在线观看 | 无码国内精品人妻少妇蜜桃视频 | 日韩欧美高清在线观看 | 免费av一区二区三区 | 欧美日韩三 | 99久久99久久精品国产片 | 国产chinesehd精品露脸 | 中文字幕91视频 | 久久欧美 | 三级色视频 | 黄色在线播放视频 | 亚洲不卡在线播放 | 边啃奶头边躁狠狠躁 | 人妻在卧室被老板疯狂进入 | www.国产一区二区三区 | 欧美性猛交xxxx黑人猛交 | 久久精品免费播放 | 国产群p视频 | 色综合久久网 | 少妇肥臀大白屁股高清 | 国产乱码久久久久久 | 亚洲精品成人无码熟妇在线 | 亚av在线 | 娇小tube性极品娇小 | 欧美18一20男同69gay | av五十路| 国产在线国偷精品免费看 | 澳门黄色| 久久影视 | 国产精品综合久久 | 国产成人精品在线播放 | 麻豆一区产品精品蜜桃的特点 | 永久久久久久久 | 国产欧美亚洲精品 | 亚洲av无码乱码国产精品fc2 | 欧美一级在线观看 | 91精品欧美一区二区三区 | 日本一本久草 | www.夜夜夜 | 中文字幕一区二区三区四区不卡 | 亚洲17p | 日韩一区免费观看 | 欧美中文字幕一区 | www在线观看免费视频 | 天堂аⅴ在线最新版在线 | 亚洲av成人精品午夜一区二区 | 美女脱了内裤喂我喝尿视频 | 精品色综合 | 成年人网站免费观看 | 婷久久| 中文字幕网站在线观看 | 亚洲熟妇无码一区二区三区导航 | 制服丝袜在线一区 | 国产sm在线 | 国产精品久久久久久久久久久久久久久久久 | www.欧美一区二区三区 | 毛片的网站 | 热播之家 | 日韩av自拍偷拍 | 粗大的内捧猛烈进出 | av中文字幕第一页 | 三级理伦 | 国产无码精品视频 | 91在线播放视频 | 久久福利片| 天天爽天天爽 | 亚洲成人福利 | 日日摸天天添天天添破 | 探花视频在线版播放免费观看 | 欧美va在线观看 | 夜夜精品一区二区无码 | 免费在线黄色av | 日本午夜精品理论片a级app发布 | 亚洲国产区 | 视频在线a | 动漫美女被到爽流 | 久久久精品久久久久久 | 中文字幕在线播放第一页 |