题意为求将所有点连接起来所需的最短路径,prim求最小生成树即可。
#include<cstdio>
#include<string.h>
#define INF 100001
#define MAXN 105
int dist[MAXN][MAXN];
bool visited[MAXN];
int main()
{
int i,j,k,num,temp,u,total;
while(scanf("%d",&num)!=EOF)
{
for(i=0;i<num;i++)
for(j=0;j<num;j++)
scanf("%d",&dist[i][j]);
memset(visited,0,sizeof(visited));
visited[0]=true;
total=0;
for(k=0;k<num-1;k++)
{
temp=INF;
for(i=0;i<num;i++)
{
if(visited[i]==true)
{
for(j=0;j<num;j++)
{
if(i==j) continue;
if(visited[j]==false&&dist[i][j]<temp) {temp=dist[i][j];u=j;}
}
}
}
visited[u]=true;
total+=temp;
}
printf("%d\n",total);
}
return 0;
}