hdu1869六度分离【图、弗洛伊德算法】


六度分离

Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3410 Accepted Submission(s): 1326

Problem Description

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

思路:求两点间最短路径

算法:弗洛伊德算法

#include <stdio.h>
#include <string.h>
#define INF 1000
int main()
{
    int n,m,i,j,k,flag;
    int map[102][102];
    while(scanf("%d %d",&n,&m)!=EOF)
    {
        flag=0;
        for (i=0;i<n;++i)
        {
            for(j=0;j<n;++j)
                map[i][j]=INF;
          //  map[i][j]=0;
        }
        for (k=0;k<m;++k)
        {
            scanf("%d %d",&i,&j);
            map[i][j]=1;
            map[j][i]=1;
        }
        for (k=0;k<n;++k)
        {
            for(i=0;i<n;++i)
                for(j=0;j<n;++j)
                    if(map[i][j]>map[i][k]+map[k][j])
                        map[i][j]=map[i][k]+map[k][j];
        }
        for (i=0;i<n;++i)
        {
            for(j=0;j<i;++j)
                if(map[i][j]>7)
                {
                    flag=1;
                    break;
                }
        }
        if(flag==1)
            printf("No\n");
        else
            printf("Yes\n");
    }
    return 0;
}
时间: 2024-10-18 05:18:57

hdu1869六度分离【图、弗洛伊德算法】的相关文章

设计-求,图片相似度比较的方法,类似谷歌搜图,百度搜图的算法

问题描述 求,图片相似度比较的方法,类似谷歌搜图,百度搜图的算法 求,图片相似度比较的方法,类似谷歌搜图,百度搜图的算法. 本人做了一个图片设计版权的问题,在用户上传图片之后,在数据库中可以查到与之相似的图片. 解决方案 这个过于专业了,普通的算法网上就有,更好的算法估计别人也不会告诉你. 解决方案二: C#实现谷歌相似图片查询算法:http://www.cnblogs.com/technology/archive/2012/07/12/Perceptual-Hash-Algorithm.htm

C++数据结构中有向带权图的子邻接域图的算法怎么实现?是C++的,谢谢

问题描述 C++数据结构中有向带权图的子邻接域图的算法怎么实现?是C++的,谢谢 C++数据结构中有向带权图的子邻接域图的算法怎么实现?是C++的,谢谢 解决方案 http://wenku.baidu.com/link?url=X3yvE5Vll4s8xwO8u0ZikzG73nkjdnGIeCMTj9JmUgoCuM2kRtkKKnLL-tVcZBqcD9Yaq-oeVzoJl0Ru0zkV4W7WOrgC_s3I0z0PodcnDWy

基于GraphCuts图割算法的图像分割----OpenCV代码与实现

转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/44151213, 来自:shiter编写程序的艺术  1.绪论 图切割算法是组合图论的经典算法之一.近年来,许多学者将其应用到图像和视频分割中,取得了很好的效果.本文简单介绍了图切算法和交互式图像分割技术,以及图切算法在交互式图像分割中的应用.   图像分割指图像分成各具特性的区域并提取出感兴趣目标的技术和过程,它是由图像处理到图像分析的关键步骤,是一种基本的计算机视觉技术.只有

图的算法问题 已知边的起止节点求其中一个系统节点总数

问题描述 图的算法问题 已知边的起止节点求其中一个系统节点总数 求大神帮我想个算法,我有n组数据对,src->target,展示出来就是数个有向无环图,每个分隔的图称为一个系统,要求给出两个数据我能知道这两个数在不在同一个系统以及这个系统的节点总数是多少.有没有什么简单可行的方法啊计算二叉树的节点总数"> 解决方案 无非就是递归遍历.你每个节点除了本身数据之外,加上一个bool值表示是否被遍历过,伪代码如下: int countNode(Node n) { int r = 0; n.

算法研究:最短路径之弗洛伊德算法

为了能讲明白弗洛伊德(Floyd)算法的主要思想,我们先来看最简单的案例.图7-7-12的左图是一个简单的3个顶点的连 通网图. 我们先定义两个二维数组D[3][3]和P[3][3], D代表顶点与顶点的最短路径权值和的矩阵.P代表对应顶点的最短 路径的前驱矩阵.在未分析任何顶点之前,我们将D命名为D(-1),其实它就是初始图的邻接矩阵.将P命名为P(-1), 初始化 为图中的矩阵. 首先我们来分析,所有的顶点经过v0后到达另一顶点的最短路径.因为只有3个顶点,因此需要查看 v1->v0->v

java 实现一个图的算法

问题描述 节点A的自然社区定义如下步骤.假设要覆盖一个包括节点A的子图G.起初,G定义为节点A每个迭代算法的包括以下步骤:(一)列出所有不包括G的邻域节点;(二)适应度最高的邻居被添加到G,构成一个更大的子图G';(三)重新计算G'的每个节点的适应度;(四)如果一个节点有负的适应度,把它是从G'中删除,产生一个新的子图G"(五)如果第四步发生,重复第三步,否则从步骤一开始得到子图G".当步骤(一)中所有的节点适应度都为负时,停止这个过程.麻烦把图的适应度和节点适应度都作为变量来表示和讨

js改变透明度实现轮播图的算法_javascript技巧

前面有分享过改变层级的轮播图算法,今天继续利用透明度来实现无位移的轮播图算法.  实现逻辑:将所有要轮播的图片全部定位到一起,即一层一层摞起来,并且利用层级的属性调整正确的图片顺序,将图片的透明度全部设置为0,然后在让初始的第一张图片的透明度为1即可,具体算法如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>改变透明度算法(经典)</title

RGB与灰度图转换算法

什么叫灰度图?任何颜色都有红.绿.蓝三原色组成,假如原来某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度: 1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 2.整数方法:Gray=(R*30+G*59+B*11)/100 3.移位方法:Gray =(R*76+G*151+B*28)>>8; 4.平均值法:Gray=(R+G+B)/3; 5.仅取绿色:Gray=G: 通过上述任一种方法求得Gray后, 将原来的RGB(R,G,B)中的R,G,B统一

图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用

图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 B(G).其中 T(G)是遍历图时所经过的边的集合,B(G) 是遍历图时未经过的边的集合.显然,G1(V, T) 是图 G 的极小连通子图,即子图G1 是连通图 G 的生成树. 深度优先生成森林   右边的是深度优先生成森林: 连通图的生成树不一定是唯一的,不同的遍历图的方法得到不同的生成树;从不