这个,我连题目都没读懂,但是听说是最小生成树,我也不是很清楚,所以直接贴代码,感谢大神
#include <iostream> #include <cmath> using namespace std; double map[210][210]; int n; struct Stone { int x, y; }s[210]; void Floyd() { int i,j,k; for(k=0; k<n; k++) for(i=0; i<n-1; i++) for(j=i+1; j<n; j++) { if(map[i][j]>map[i][k] && map[i][j]>map[k][j]) { if(map[i][k]>map[k][j]) map[j][i]=map[i][j] = map[i][k]; else map[j][i]=map[i][j] = map[k][j]; } } } double getdis(int a, int b) { return sqrt((double)(s[a].x-s[b].x)*(s[a].x-s[b].x)+(double)(s[a].y-s[b].y)*(s[a].y-s[b].y)); } int main() { int Case=0,i,j; while(scanf("%d", &n), n) { for(i=0; i<n; i++) scanf("%d %d", &s[i].x, &s[i].y); for(i=0; i<n; i++) for(j=i+1; j<n; j++) { map[i][j]=map[j][i]=getdis(i,j); } Floyd(); printf("Scenario #%d Frog Distance = %.3lf ", ++Case, map[0][1]); } return 0; }