UVA 247 Calling Circles(Floyd算法传递闭包)
来源:互联网 发布:windows 安装程序 编辑:程序博客网 时间:2024/06/07 17:38
题意:
两两给出名字,形成一组单向关系,输入所有关系后,输出在同一连通分量的所有名字。
解题思路:
首先利用map将名字映射为数字,然后利用Floyd算法传递闭包,最后使用dfs输出即可。
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=183
#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<cctype>#include<list>#include<iostream>#include<map>#include<queue>#include<set>#include<stack>#include<vector>using namespace std;#define FOR(i, s, t) for(int i = (s) ; i <= (t) ; ++i)#define REP(i, n) for(int i = 0 ; i < (n) ; ++i)int buf[10];inline long long read(){ long long x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar(); } return x*f;}inline void writenum(int i){ int p = 0; if(i == 0) p++; else while(i) { buf[p++] = i % 10; i /= 10; } for(int j = p - 1 ; j >= 0 ; --j) putchar('0' + buf[j]);}/**************************************************************/#define MAX_N 30const int INF = 0x3f3f3f3f;map<string, int> mp;vector<string> name;int g[MAX_N][MAX_N];int vis[MAX_N];int n;void dfs(int s){ vis[s] = 1; for(int i = 0 ; i < n ; i++) { if(g[s][i] && g[i][s] && !vis[i]) { cout<<", "<<name[i]; dfs(i); } }}int main(){ int cas = 1; while(~scanf("%d", &n) && n) { int cnt = 0; mp.clear(); name.clear(); memset(g, 0, sizeof(g)); memset(vis, 0, sizeof(vis)); int m = read(); for(int i = 0 ; i < m ; i++) { string a, b; cin >> a >> b; if(!mp.count(a)) { mp[a] = cnt++; name.push_back(a); } if(!mp.count(b)) { mp[b] = cnt++; name.push_back(b); } int x = mp[a]; int y = mp[b]; g[x][y] = 1; } 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])); if(cas != 1) cout<<endl; printf("Calling circles for data set %d:\n", cas++); for(int i = 0 ; i < n ; i++) { if(!vis[i]) { cout<<name[i]; dfs(i); cout<<endl; } } } return 0;}
0 0
- 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传递闭包
- UVA - 247 - Calling Circles(floyd算法)
- 247 - Calling Circles (Floyd 求传递闭包)
- UVA 247 Calling Circles ( Floyd求传递必包 )
- UVA 247 - Calling Circles(floyd 传递背包)
- uva 247 Calling Circles(fioyd传递闭包和DFS)
- UVa - 247 Calling Circles(Floyd - TC)
- 【UVA】247 - Calling Circles(floyd判断包闭,dfs输出)
- UVA 247 - Calling Circles(floyd判断包闭 ,dfs输出)
- UVaOJ 247 Calling Circles(传递闭包)
- 最短路经典例题-紫书11-4 Calling Circles(Floyd传递闭包+map+DFS)
- uva 247 Calling Circles(Floyd 的简单应用)
- uva247 - Calling Circles(传递闭包+DFS)
- uva247-Calling Circles-Floyd算法
- java web 乱码总结
- 排序算法-交换排序_冒泡排序
- c语言之指针数组理解一
- hadoop完全分布式集群+Win Eclipse+Hbase+Hive+Zookeeper+Sqoop+SPARK试验机平台
- 欢迎使用CSDN-markdown编辑器
- UVA 247 Calling Circles(Floyd算法传递闭包)
- BroadcastReceiver
- 60款很酷的 jQuery 幻灯片演示和下载
- SCCB协议Verilog HDL程序
- 读DL论文心得之RCNN
- ios常用的工具 插件
- 欢迎使用CSDN-markdown编辑器
- 一直认为的Jquery中的$("#id")和document.getElementByID("id")是不一样的
- Angular知识点