zoukankan      html  css  js  c++  java
  • HDU 六度分离

    六度分离
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
    Submit Status

    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
     
    佛洛依德算法 + 暴力遍历一遍map数组的数值 是否都<=7,只要有不符合的就break,并且printf(No); 否则打印 Yes 。
     
    #include <stdio.h>
    #include <string.h>
    #define ff 999999
    int map[105][105];
    int n;
    void flord()
    {
    	int i, j, k;
    	int flag=1;
        for(k=0; k<n; k++)
    	{
    		for(i=0; i<n; i++)
    		{
    			for(j=0; j<n; j++)
    			{
    				if(map[i][k]!=ff && map[k][j]!=ff && map[i][k]+map[k][j] < map[i][j] )
    				{
    					map[i][j] = map[i][k] + map[k][j] ;
    				}
    			}
    		}
    	}
    	for(i=0; i<n; i++)
    	{
    		for(j=0; j<n; j++)
    		{
    			if(map[i][j] > 7)
    			{
    				flag = 0;
    				break;
    			}
    		}
    		if(flag==0)
    			break;
    	}
    	if(flag==1)
    		printf("Yes
    ");
    	else if(flag==0)
    		printf("No
    ");
    }
    
    int main()
    {
    	int m;
    	int i, j;
    	int u, v;
    
        while(scanf("%d %d", &n, &m)!=EOF)
    	{
    		for(i=0; i<n; i++)  //初始化map
    		{
    			for(j=0; j<n; j++)
    			{
    				if(i==j)
    				{
    					map[i][j] = 0;
    				}
    				else
    				{
    					map[i][j] = ff;
    				}
    			}
    		}
            
    
    		for(i=0; i<m; i++)
    		{
    			scanf("%d %d", &u, &v );
    			map[u][v] = 1;
    			map[v][u] = 1;
    		}
    		flord();
    
    	}
    	return 0;
    }
    
  • 相关阅读:
    专职DBA-MySQL体系结构与基本管理
    JSON
    MIME类型
    文件上传下载
    response常用的方法
    2020.11.27小记
    HTTP请求状态码
    1561. Maximum Number of Coins You Can Get
    1558. Minimum Numbers of Function Calls to Make Target Array
    1557. Minimum Number of Vertices to Reach All Nodes
  • 原文地址:https://www.cnblogs.com/yspworld/p/3884968.html
Copyright © 2011-2022 走看看