Floyd的应用:if(d[i][j]>d[i][k]+d[k][j]) d[i][j] = d[i][k] + d[k][j] + 1;表示d[i][j]多出来了k这个人。
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1869
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int d[105][105];
void Input(){
int n,m;
while(~scanf("%d %d",&n,&m)){
memset(d,0x3f,sizeof(d));
int tempa,tempb;
for(int i=0;i<m;i++){
scanf("%d %d",&tempa,&tempb);
d[tempa][tempb] = 0;
d[tempb][tempa] = 0;
}
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(d[i][j]>d[i][k]+d[k][j])
d[i][j] = d[i][k] + d[k][j] + 1;
}
}
}
int flag = 1;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(d[i][j]>6)
flag = 0;
}
}
if(flag)
puts("Yes");
else
puts("No");
}
}
void File(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
}
int main(void){
// File();
Input();
return 0;
}