本题链接:点击打开链接
今天新学的Floyd算法,可用来求任意两点的最短距离,用此题练习练习。参考代码:
#include<stdio.h> #define INF 0x3f3f3f3f #define MAX 110 int map[MAX][MAX]; int n,m; void Floyd() { for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(map[i][j]>map[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; } int main() { while(scanf("%d%d",&n,&m)!=EOF) { for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(i==j) map[i][j]=0; else map[i][j]=INF; for(int i=0;i<m;i++) { int a,b; scanf("%d%d",&a,&b); map[a][b]=map[b][a]=1; } Floyd(); int flag=0; for(int i=0;i<n;i++) { for(int j=0;j<i;j++) { if(map[i][j]>7) { flag=1; break; } } if(flag) break; } if(flag) printf("No\n"); else printf("Yes\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/lsgbb/article/details/47831569