六度分离(Floyd算法)

六度分离(Floyd算法)六度分离 1967 年 美国著名的社会学家斯坦利 米尔格兰姆提出了一个名为 小世界现象 smallworldph 的著名假说 大意是说 任何 2 个素不相识的人中间最多只隔着 6 个人 即只用 6 个人就可以将他们联系在一起 因此他的理论也被称为 六度分离 理论 sixdegreesof

六度分离(Floyd)

1967年,美国著名的社会学家斯坦利·米尔格兰姆提出了一个名为“小世界现象(small world phenomenon)”的著名假说,大意是说,任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论(six degrees of separation)。虽然米尔格兰姆的理论屡屡应验,一直也有很多社会学家对其兴趣浓厚,但是在30多年的时间里,它从来就没有得到过严谨的证明,只是一种带有传奇色彩的假说而已。

Lele对这个理论相当有兴趣,于是,他在HDU里对N个人展开了调查。他已经得到了他们之间的相识关系,现在就请你帮他验证一下“六度分离”是否成立吧。
Input
本题目包含多组测试,请处理到文件结束。
对于每组测试,第一行包含两个整数N,M(0<N<100,0<M<200),分别代表HDU里的人数(这些人分别编成0~N-1号),以及他们之间的关系。
接下来有M行,每行两个整数A,B(0<=A,B<N)表示HDU里编号为A和编号B的人互相认识。
除了这M组关系,其他任意两人之间均不相识。
Output
对于每组测试,如果数据符合“六度分离”理论就在一行里输出"Yes",否则输出"No"。
Sample Input

8 7 0 1 1 2 2 3 3 4 4 5 5 6 6 7 8 8 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 0 

Sample Output

Yes Yes 

思路:题意是说任何2个素不相识的人中间最多只隔着6个人,这句话说好想也好想,说不好想也不好想,他是可以转换成求两个人之间的最短路,即用Floyd算法
注意:是应该和6比,还是和7比呢,那就让我们算一下,e[i][j]的起始值一般为0或inf,所以我们就规定a,b之间距离为1,以1-8为例,假设1-2,2-3,…到7-8之间都为1,那么我们只需数一下1-2-3-4-5-6-7-8之间有几个-即可,显然是7,所以我们应该和7比

AC代码:

#include<stdio.h> #include<string.h> #include<algorithm> #define inf 0x3f3f3f using namespace std; int e[1100][1100],f[1100]; int main() { 
    int n,m,i,j,k,a,b,f; while(~scanf("%d%d",&n,&m)) { 
    f=0; for(i=0;i<n;i++) { 
    for(j=0;j<n;j++) { 
    if(i==j) e[i][j]=0; else e[i][j]=inf; } } for(i=0;i<m;i++) { 
    scanf("%d%d",&a,&b); e[a][b]=e[b][a]=1; } for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) e[i][j]=min(e[i][j],e[i][k]+e[k][j]); for(i=0;i<n;i++) { 
    for(j=0;j<n;j++) { 
    if(e[i][j]>7) { 
    f=1; break; } } } if(!f) printf("Yes\n"); else printf("No\n"); } return 0; } 
今天的文章 六度分离(Floyd算法)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-07 18:01
下一篇 2024-12-07 17:57

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/80159.html