HDU-1869 六度分离 最短路
2013-10-21 18:36
330 查看
简单题 裸floyd 被DP虐了 把之前学的算法拉出来复习下
题意:
任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论;
模型:
以直接认识的距离设为1 不认识的为无穷大 进行floyd(因为是要任意2个人) 最后判断是否有任意2人的距离超过7(间隔6人);
题意:
任何2个素不相识的人中间最多只隔着6个人,即只用6个人就可以将他们联系在一起,因此他的理论也被称为“六度分离”理论;
模型:
以直接认识的距离设为1 不认识的为无穷大 进行floyd(因为是要任意2个人) 最后判断是否有任意2人的距离超过7(间隔6人);
#include<stdio.h> #include<string.h> const int maxn = 205; const int inf = 1<<29; int n,m; int dis[maxn][maxn]; void Floyd() { for( int k = 0; k < n; k ++ ) { for( int i = 0; i < n; i ++ ) { for( int j = 0; j < n; j ++ ) { if( dis[i][j] > dis[i][k] + dis[k][j] ) dis[i][j] = dis[i][k] + dis[k][j]; } } } } int main() { //freopen( "data.in","r",stdin ); int a,b; while( scanf("%d%d",&n,&m) == 2 ) { for( int i = 0; i < n; i ++ ) { for( int j = 0; j < n; j ++ ) { if( i == j ) dis[i][j] = 0; else dis[i][j] = inf; } } for( int i = 1; i <= m; i ++ ) { scanf("%d%d",&a,&b); dis[a][b] = dis[b][a] = 1; } Floyd(); int flag = 1; for( int i = 0; i < n; i ++ ) { for( int j = 0; j < n; j ++ ) { if( dis[i][j] > 7 ) { flag = 0; break; } } } if( flag ) puts("Yes"); else puts("No"); } return 0; }
相关文章推荐
- hdu 1869 六度分离(floyd最短路)
- HDU 1869 六度分离(最短路 floyd)
- HDU 1869 六度分离(最短路)
- HDU 1869 六度分离 最短路
- 【HDU】-1869-六度分离(最短路)(floyd)
- HDU 1869六度分离(flody最短路)
- HDU--1869--六度分离(最短路)
- HDU 1869 六度分离(最短路)
- HDU-1869-六度分离【最短路】
- HDU 1869 六度分离(迪杰斯特拉/优先队列/最短路)
- HDU 1869--六度分离 【任意点最短路】
- hdu 1869(最短路flody-六度分离)
- hdu 1869 六度分离【裸最短路】
- HDU1869 - 六度分离 - 最短路变形之关系处理
- HDU 1869 最短路 floyd
- HDU-1869六度分离
- HDU--1869六度分离
- hdu 1869 最短路裸题
- hdu 1869 六度分离
- HDU 1869 六度分离