电话圈(floyd)
题意:
如果两个人相互打电话,则说他们在同一个电话圈里。例如,a打给b,b打给c,c打给d,d打给a,则这4个人在同一个圈里;如果e打给f但f不打给e,则不能推出e和f在同一个电话圈里,输出所有电话圈。
//floyd求传递闭包,dfs求出电话圈;
//还有循环一定从0开始啊,标记人也要 第0个,第1个,第2个。。。。。因为动态数组你一压进去就是从0开始
//所以你之前做才一直错啊 从0开始
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<vector> 6 #include<map> 7 using namespace std; 8 string s1,s2;//姓名 9 int n,m; 10 vector<string>name;//动态数组名字 11 map<string,int>ID;//把人给编号 12 int vis[30];//是否访问 13 int d[30][30];//是否能通电话 14 void dfs(int k)//深搜求电话圈 15 { 16 vis[k]=1; 17 for(int i=0;i<n;i++) 18 { 19 if(!vis[i]&&d[i][k]&&d[k][i]) 20 { 21 cout<<name[i]<<" "; 22 dfs(i); 23 } 24 } 25 } 26 int main() 27 { 28 while(scanf("%d%d",&n,&m)!=EOF)//n个人m个电话圈 29 { 30 memset(vis,0,sizeof(vis)); 31 memset(d,0,sizeof(d)); 32 int cnt=0; 33 name.clear(); 34 ID.clear(); 35 for(int i=1;i<=m;i++) 36 { 37 cin>>s1>>s2; 38 if(!ID.count(s1))//这个人没有 39 { 40 ID[s1]=cnt++;//给这个人编号 41 name.push_back(s1);//进入队列 42 } 43 if(!ID.count(s2)) 44 { 45 ID[s2]=cnt++; 46 name.push_back(s2); 47 } 48 int x=ID[s1]; 49 int y=ID[s2]; 50 d[x][y]=1;//这两个人可以互相通电话 51 } 52 for(int k=0;k<n;k++)//floyd 53 for(int i=0;i<n;i++) 54 for(int j=0;j<n;j++) 55 d[i][j]=d[i][j]||d[i][k]&&d[k][j]; 56 for(int i=0;i<n;i++)//求电话圈 57 { 58 if(!vis[i]) 59 { 60 cout<<name[i]<<" "; 61 dfs(i); 62 printf("\n");//在这里有个回车。。不然没形成一个电话圈时,它会输出一个电话圈 63 } 64 } 65 } 66 }
View Code
//学到的floyd判圈,dfs求圈
转载于:https://www.cnblogs.com/zzyh/p/6680825.html
电话圈(floyd)相关推荐
- java 加法不用_【Java】 剑指offer(65) 不用加减乘除做加法
本文参考自<剑指offer>一书,代码采用Java语言. 题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷四则运算符号. 思路 对数字做运算,除了四则运算外,只剩下位 ...
- UVA - 247 Calling Circles(Floyd求传递闭包)
题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...
- Uva 247 - Calling Circles(传递闭包 / 强连通分量)
题目链接 https://vjudge.net/problem/UVA-247 [题意] 如果两个人直接或间接互相打电话,则说明他们在同一个电话圈里.例如a打给b,b打给c,c打给d,d打给a,则这4 ...
- 【算法特训总结】计算机经典算法的核心思想及独特角度的解读
计算机经典算法的核心思想及独特角度的解读 在1月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...
- 9.1总结前日(数学+图论)
后天就要开学了,这应该是这个暑假的最后一次总结了吧. 说实话,忙忙碌碌的一个暑假,学到东西了么?学到了.学了多少?还可以吧hhh. 想起来去年的这个时候,我还抱着紫书在那里看爆搜,啥也看不懂,现在呢, ...
- 区块链开发指南_区块链开发权威指南
区块链开发指南 by Haseeb Qureshi 由Haseeb Qureshi 区块链开发权威指南 (The authoritative guide to blockchain developme ...
- floyd 判圈算法 UVa 11549 计算器谜题
题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- leetcode202(Floyd判圈算法(龟兔赛跑算法))
Write an algorithm to determine if a number is "happy". 写出一个算法确定一个数是不是快乐数. A happy number ...
- Floyd判圈算法(Floyd's cycle detection
Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm).该算法由美国科学家罗伯特·弗洛伊德发明 ...
最新文章
- c语言字母表关键字,读书笔记-C语言关键字
- Java配置dbeaver_ubuntu我的工具安装 eclipse、dbeaver、jdk、kdesvn、
- mysql 获取刚插入行id汇总
- [SCOI2013]多项式的运算
- mysql配置连接远程_MySql配置远程访问
- ncurses初始化函数:raw(),cbreak(),echo(),noecho(),keypad(),halfdelay()
- 转Windows 2003服务器安全配置终极技巧
- 《黑镜》黑科技成真 | 解码脑电信号,AI重构脑中的画面
- 数据结构和算法详解(二)——线性表(数组、链表、栈、队列)
- 【服务器】宝塔部署eoLinker开源版
- ThinkPhp项目部署到Linux session_start() 报错:failed:No such file or directory
- 1811114每日一句
- 【MySQL从入门到精通】:了解SQL语言
- SysCeo_Win7_Classic_V7.8_32位+64位(6in1)纯净经典版
- [渝粤教育] 西南科技大学 液压与气压传动 在线考试复习资料
- 随机森林 算法原理详解与实现步骤
- Ps2021软件安装Mac(含M1)、Windows版
- 曙光服务器通过ipmi安装系统,曙光服务器ipmi部署记录精编版
- 题8.9:写一函数,将一个3x3的整型矩阵转置。
- payscale 美国计算机专业,2016PayScale美国大学排名:计算机专业
热门文章
- 使用vue-axios请求geoJson数据报错的问题
- java date加一天_Java日期时间API系列15-----Jdk8中API类,java日期计算2,年月日时分秒的加减等...
- vue标准时间改为时间戳_正确的济南初中寒假放假时间安排出来啦!家长速戳→...
- tp5类的属性不存在_thinkPHP5.1框架中Request类四种调用方式示例
- 表达式前后缀表达形式 [zz]
- AUTOSAR从入门到精通100讲(三十)-makefile原理及实战案例
- java职业教育考试题_Java认证考试中Java构造方法题目解答
- 输出以下图案菱形7行_春夏格子图案超流行,三木的一款格子连衣裙,带来田园少女风...
- thinkphp+mysql+join+where_thinkphp5.0 多join时where无法between
- Flutter快速构建集美观与⾼性能于⼀体的APP