题意:

如果两个人相互打电话,则说他们在同一个电话圈里。例如,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)相关推荐

  1. java 加法不用_【Java】 剑指offer(65) 不用加减乘除做加法

    本文参考自<剑指offer>一书,代码采用Java语言. 题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷四则运算符号. 思路 对数字做运算,除了四则运算外,只剩下位 ...

  2. UVA - 247 Calling Circles(Floyd求传递闭包)

    题目: 思路: 利用Floyd求传递闭包(mp[i][j] = mp[i][j]||(mp[i][k]&&mp[k][j]);),当mp[i][j]=1&&mp[j][ ...

  3. Uva 247 - Calling Circles(传递闭包 / 强连通分量)

    题目链接 https://vjudge.net/problem/UVA-247 [题意] 如果两个人直接或间接互相打电话,则说明他们在同一个电话圈里.例如a打给b,b打给c,c打给d,d打给a,则这4 ...

  4. 【算法特训总结】计算机经典算法的核心思想及独特角度的解读

    计算机经典算法的核心思想及独特角度的解读 在1月1日新年之日开始的"算法特训"(一月一日~二月十日)终于结束了,对于这本<<算法竞赛经典>>,除了第十章(在 ...

  5. 9.1总结前日(数学+图论)

    后天就要开学了,这应该是这个暑假的最后一次总结了吧. 说实话,忙忙碌碌的一个暑假,学到东西了么?学到了.学了多少?还可以吧hhh. 想起来去年的这个时候,我还抱着紫书在那里看爆搜,啥也看不懂,现在呢, ...

  6. 区块链开发指南_区块链开发权威指南

    区块链开发指南 by Haseeb Qureshi 由Haseeb Qureshi 区块链开发权威指南 (The authoritative guide to blockchain developme ...

  7. floyd 判圈算法 UVa 11549 计算器谜题

    题目http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. leetcode202(Floyd判圈算法(龟兔赛跑算法))

    Write an algorithm to determine if a number is "happy". 写出一个算法确定一个数是不是快乐数. A happy number ...

  9. Floyd判圈算法(Floyd's cycle detection

    Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm).该算法由美国科学家罗伯特·弗洛伊德发明 ...

最新文章

  1. c语言字母表关键字,读书笔记-C语言关键字
  2. Java配置dbeaver_ubuntu我的工具安装 eclipse、dbeaver、jdk、kdesvn、
  3. mysql 获取刚插入行id汇总
  4. [SCOI2013]多项式的运算
  5. mysql配置连接远程_MySql配置远程访问
  6. ncurses初始化函数:raw(),cbreak(),echo(),noecho(),keypad(),halfdelay()
  7. 转Windows 2003服务器安全配置终极技巧
  8. 《黑镜》黑科技成真 | 解码脑电信号,AI重构脑中的画面
  9. 数据结构和算法详解(二)——线性表(数组、链表、栈、队列)
  10. 【服务器】宝塔部署eoLinker开源版
  11. ThinkPhp项目部署到Linux session_start() 报错:failed:No such file or directory
  12. 1811114每日一句
  13. 【MySQL从入门到精通】:了解SQL语言
  14. SysCeo_Win7_Classic_V7.8_32位+64位(6in1)纯净经典版
  15. [渝粤教育] 西南科技大学 液压与气压传动 在线考试复习资料
  16. 随机森林 算法原理详解与实现步骤
  17. Ps2021软件安装Mac(含M1)、Windows版
  18. 曙光服务器通过ipmi安装系统,曙光服务器ipmi部署记录精编版
  19. 题8.9:写一函数,将一个3x3的整型矩阵转置。
  20. payscale 美国计算机专业,2016PayScale美国大学排名:计算机专业

热门文章

  1. 使用vue-axios请求geoJson数据报错的问题
  2. java date加一天_Java日期时间API系列15-----Jdk8中API类,java日期计算2,年月日时分秒的加减等...
  3. vue标准时间改为时间戳_正确的济南初中寒假放假时间安排出来啦!家长速戳→...
  4. tp5类的属性不存在_thinkPHP5.1框架中Request类四种调用方式示例
  5. 表达式前后缀表达形式 [zz]
  6. AUTOSAR从入门到精通100讲(三十)-makefile原理及实战案例
  7. java职业教育考试题_Java认证考试中Java构造方法题目解答
  8. 输出以下图案菱形7行_春夏格子图案超流行,三木的一款格子连衣裙,带来田园少女风...
  9. thinkphp+mysql+join+where_thinkphp5.0 多join时where无法between
  10. Flutter快速构建集美观与⾼性能于⼀体的APP