这题就是最小生成树Prim,d[]代表的是整个连接集合和未连接点的最小距离。
#includeint map[105][105];int vis[105], d[105];const int INF = 0x3f3f3f3f;int n,ans;void Prim(){ d[0] = 0; ans = 0; for (int i = 0; i < n;i++) { int end = -1; for (int j = 0; j < n;j++) { if (!vis[j]&&(end==-1||d[j] map[end][j]) d[j] = map[end][j]; } }}int main(){ while (scanf("%d",&n)!=EOF) { for (int i = 0; i < 105;i++) { vis[i] = 0; d[i] = INF; } for (int i = 0; i < n;i++) { for (int j = 0; j < n;j++) { scanf("%d",&map[i][j]); } } Prim(); printf("%d\n", ans); } return 0;}