最小生成树
给出坐标x,y,计算出各店之间的距离 求最小生成树。
#include <iostream> #include <cstring> #include <cstdio> #include <math.h> #define INF 0x3f3f3f3f using namespace std; double map[1001][1001], t, vis[1001],dis[1001]; void prim() { memset(dis,1,sizeof(dis)); double sum = 0; int k; for(int i = 0; i < t; i++) { vis[i] = map[0][i]; } double min; dis[0] = 0; for(int i = 1; i < t; i++) { min = INF; for(int j = 0; j < t; j++) { if(dis[j]!=0&&vis[j]<min) { min = vis[j]; k = j; } } dis[k] = 0; sum+=min; for(int j = 0; j < t; j++) if(dis[j]!=0&&map[k][j] < vis[j]) { vis[j] = map[k][j]; } } printf("%.2lf\n",sum); } int main() { double a[1001],b[1001]; while(~scanf("%lf",&t)) { for(int i = 0; i < t; i++) scanf("%lf%lf",&a[i],&b[i]); for(int i = 0; i < t; i++) for(int j = 0; j < t; j++) map[i][j] = sqrt(pow(a[j]-a[i],2)+pow(b[j]-b[i],2)); /*for(int i = 0; i < t; i++) { for(int j = 0; j < t; j++) printf("%lf",map[i][j]); printf("\n"); }*/ // int n, x, y; prim(); } return 0; }