UVA 247 - Calling Circles(floyd判断包闭 ,dfs输出)
来源:互联网 发布:在线c语言编译器 编辑:程序博客网 时间:2024/06/16 12:29
紫书推荐的题
题意:
给你n个人,m条边,a->b,b->a,才能说这两个人是联通的。问现在有多少个联通圈。输出每个联通圈。n<=25
思路:
直接建图,用有向图的闭包传递特性来处理每个人之间的联通关系。然后dfs一次,遍历邻接矩阵中与某个点相连的几个点,边遍历, 边打印输出。
代码:
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#include <map>#include<string>using namespace std;const int N=26;int n,m;int d[N][N],id;int vis[N];map<string,int>name;vector<string>Name;void init(){ name.clear(); Name.clear(); id=0; memset(d, 0, sizeof(d)); memset(vis, 0, sizeof(vis));}void dfs(int u){ vis[u]=1; for(int v=0; v<n; v++){ if(!vis[v] && d[u][v] && d[v][u]){ cout<<", "<<Name[v]; dfs(v); } }}int main(){ int kase=1; while(cin>>n>>m){ init(); if(!n && !m)break; for(int i=0; i<m; i++){ string s1,s2; cin>>s1>>s2; if(!name.count(s1)){ name[s1] = id++; Name.push_back(s1); } if(!name.count(s2)){ name[s2] = id++; Name.push_back(s2); } int x = name[s1] , y = name[s2]; /*找出2个字符串对应的ID*/ d[x][y]=1; /*连接*/ } for(int k=0; k<n; k++) for(int i=0; i<n; i++) for(int j=0; j<n; j++) d[i][j]=d[i][j]||(d[i][k] && d[k][j]); if(kase>1)cout<<endl; cout << "Calling circles for data set " << kase++ <<":" << endl; for(int i=0; i<n; i++){ if(!vis[i]){ cout<<Name[i]; dfs(i); cout<<endl; } } } return 0;}/*5 5A BA BA BC DE C*/
0 0
- 【UVA】247 - Calling Circles(floyd判断包闭,dfs输出)
- UVA 247 - Calling Circles(floyd判断包闭 ,dfs输出)
- 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(fioyd传递闭包和DFS)
- UVa - 247 Calling Circles(Floyd - TC)
- UVA - 247 - Calling Circles(floyd算法)
- 247 - Calling Circles (Floyd 求传递闭包)
- 【UVA 247】Calling Circles (floyd判断连通性+map)
- UVA 247 Calling Circles ( Floyd求传递必包 )
- 最短路经典例题-紫书11-4 Calling Circles(Floyd传递闭包+map+DFS)
- UVA 247 - Calling Circles(floyd 传递背包)
- uva 247 Calling Circles(Floyd 的简单应用)
- uva247 - Calling Circles(传递闭包+DFS)
- UVa 247 Calling Circles
- UC/OS-II的中断和时钟
- java集合框架系列---Iterator和Enumeration比较
- Mongodb启动问题
- virtualenv的简单用法
- Inverted Multi-Index
- UVA 247 - Calling Circles(floyd判断包闭 ,dfs输出)
- vue.js视频教程,vue.js视频教程下载
- POJ 2155 Matrix
- an important method -- quicksort
- 大型SpringMVC,Mybatis,Redis,Solr,Nginx,SSM分布式电商项目视频教程下载
- Windwos密码导出的几种姿势
- DDC及EDID内容简介
- 门面模式
- 18 Ui美化 剪切动画clip