UVa 247 Calling Circles 经典floyd传递闭包
来源:互联网 发布:程序员的自我修养 ppt 编辑:程序博客网 时间:2024/06/07 21:49
只需将floyd变下形,将原来的G[i][j]=min(G[i][j],G[i][k]+G[k][j])改成G[i][j]=G[i][j]||(G[i][k]&&G[k][j]),
即判断i到j是否有路。
这题将字符串转换为数字编号,用Floyd判断是否连通,最后dfs输出即可。
#include<bits/stdc++.h> const int maxn=1005;const int INF=0x3f3f3f3f;typedef long long LL;using namespace std;int G[maxn][maxn]; //1和0分别表示"连通"和"不连通" vector<string> S;int vis[maxn];int N,M;void init(){S.clear();memset(G,0,sizeof(G));for(int i=0;i<N;i++) G[i][i]=1; //顶点到自己是"连通"的 }int getNum(const string &s) //把字符串转换为编号 {for(int i=0;i<S.size();i++)if(S[i]==s) return i;S.push_back(s);return S.size()-1;}void floyd(){for(int k=0;k<N;k++)for(int i=0;i<N;i++)for(int j=0;j<N;j++)G[i][j]=G[i][j]||(G[i][k]&&G[k][j]);}void dfs(int v){vis[v]=1;for(int i=0;i<N;i++){if(!vis[i]&&G[v][i]&&G[i][v]) //要双向"连通 "{cout<<", "<<S[i];dfs(i);}}}int main(){//freopen("E:\\ACM\\test.txt","r",stdin);int t=1;string a,b;int s,e;while(cin>>N>>M,N+M){init();for(int i=0;i<M;i++) {cin>>a>>b;s=getNum(a);e=getNum(b);G[s][e]=1; //这里是单向的 }floyd();memset(vis,0,sizeof(vis));if(t!=1) puts("");cout<<"Calling circles for data set "<<t++<<":"<<endl;for(int i=0;i<N;i++){if(!vis[i]){cout<<S[i];dfs(i);puts("");}}}return 0;}
阅读全文
0 0
- UVa 247 Calling Circles 经典floyd传递闭包
- [UVA 247]Calling Circles[传递闭包][floyd]
- UVA 247 Calling Circles(Floyd算法传递闭包)
- UVa - 247 - Calling Circles ( Floyd 传递闭包 )
- uva 247 Calling Circles floyd求传递闭包 + tarjin
- UVA 247 Calling Circles ( Floyd求传递必包 )
- 247 - Calling Circles (Floyd 求传递闭包)
- uva 247 Calling Circles(fioyd传递闭包和DFS)
- 最短路经典例题-紫书11-4 Calling Circles(Floyd传递闭包+map+DFS)
- UVA 247 - Calling Circles(floyd 传递背包)
- 【UVA】247 - Calling Circles(floyd判断包闭,dfs输出)
- UVA 247 - Calling Circles(floyd判断包闭 ,dfs输出)
- UVa - 247 Calling Circles(Floyd - TC)
- UVA - 247 - Calling Circles(floyd算法)
- UVaOJ 247 Calling Circles(传递闭包)
- uva247 - Calling Circles(传递闭包+DFS)
- UVa 247 Calling Circles
- UVA 247 Calling Circles
- 【普组模拟赛】马语翻译
- springcloud初学者-mongoRepository
- 华为终端CEO余承东:华为正在研发人工智能处理器
- Qt 解决界面切换时的闪烁问题
- 系统恢复
- UVa 247 Calling Circles 经典floyd传递闭包
- ora-00923:未找到要求的form关键字
- 实现启动动画的一种方法
- webpack生成html文件,用于后端渲染的研究
- Codeforces Round#321 (div.2) A,B,C,D;(细节处理,尺取,dfs(树上的),状态压缩dp)
- 基于51单片机矩阵键盘程序
- kaggle之泰坦尼克号
- DevOps 初学者宝典
- 运用java.net.HttpURLConnection实现java多线程下载文件