产品网站怎么做超链接,让你的静态网站 做后台,山东建设工程管理局网站,开发公司虚列成本题意#xff1a; 如果两个人相互打电话#xff0c;则说他们在同一个电话圈里。例如#xff0c;a打给b#xff0c;b打给c#xff0c;c打给d#xff0c;d打给a#xff0c;则这4个人在同一个圈里#xff1b;如果e打给f但f不打给e#xff0c;则不能推出e和f在同一个电话圈…题意 如果两个人相互打电话则说他们在同一个电话圈里。例如a打给bb打给cc打给dd打给a则这4个人在同一个圈里如果e打给f但f不打给e则不能推出e和f在同一个电话圈里输出所有电话圈。 //floyd求传递闭包dfs求出电话圈 //还有循环一定从0开始啊标记人也要 第0个第1个第2个。。。。。因为动态数组你一压进去就是从0开始 //所以你之前做才一直错啊 从0开始 1 #includeiostream2 #includecstdio3 #includecstdlib4 #includecstring5 #includevector6 #includemap7 using namespace std;8 string s1,s2;//姓名 9 int n,m;
10 vectorstringname;//动态数组名字
11 mapstring,intID;//把人给编号
12 int vis[30];//是否访问
13 int d[30][30];//是否能通电话
14 void dfs(int k)//深搜求电话圈
15 {
16 vis[k]1;
17 for(int i0;in;i)
18 {
19 if(!vis[i]d[i][k]d[k][i])
20 {
21 coutname[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 cnt0;
33 name.clear();
34 ID.clear();
35 for(int i1;im;i)
36 {
37 cins1s2;
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 xID[s1];
49 int yID[s2];
50 d[x][y]1;//这两个人可以互相通电话
51 }
52 for(int k0;kn;k)//floyd
53 for(int i0;in;i)
54 for(int j0;jn;j)
55 d[i][j]d[i][j]||d[i][k]d[k][j];
56 for(int i0;in;i)//求电话圈
57 {
58 if(!vis[i])
59 {
60 coutname[i] ;
61 dfs(i);
62 printf(\n);//在这里有个回车。。不然没形成一个电话圈时它会输出一个电话圈
63 }
64 }
65 }
66 } View Code //学到的floyd判圈dfs求圈转载于:https://www.cnblogs.com/zzyh/p/6680825.html