解題思路:
prim算法求解最小生成樹
#include<iostream>
#include<cstring>
using namespace std;
const int inf = 1<<30;
int main()
{
int n;
int dis[110][110];
int linkTown[110]; //標記已連接的城鎮
int linkNum; //已連接的城鎮數
while(cin>>n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>dis[i][j];
memset(linkTown,0,sizeof(linkTown));
linkTown[1] = 1;
linkNum = 1;
int ans = 0;
while(linkNum<n)
{
int maxd = inf;
int p,q;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(linkTown[i]==1 && linkTown[j]==0 && dis[i][j]<maxd)
{
maxd = dis[i][j];
p = i;
q = j;
}
linkTown[q] = 1;
linkNum ++;
ans += dis[p][q];
}
cout<<ans<<endl;
}
return 0;
}