最短路水题,用上次讲到的prim算法就能可以了。直接上代码喽( ̄▽ ̄)"。
#include<iostream>
#include<cstring>
using namespace std;
#define inf 0x3f3f3f3f
int d[105][105],v[105]={0},lowcost[105];
void prim(int n){
int i,j,Min,k,begin=1;
v[1]=1;
int cost=0;
for(i=1;i<=n;i++) lowcost[i]=d[1][i];
for(i=1;i<n;i++){
Min=inf;
k=0;
for(j=1;j<=n;j++){
if(!v[j]&&Min>lowcost[j]){
Min=lowcost[j];
k=j;
}
}
v[k]=1;
begin=k;
cost+=Min;
for(j=1;j<=n;j++){
if(!v[j]&&d[begin][j]<lowcost[j])
lowcost[j]=d[begin][j];
}
}
cout<<cost<<endl;
}
int main(){
int n,i,j,a;
while(cin>>n){
memset(v,0,sizeof(v));
memset(d,0x3f,sizeof(d));
for(i=1;i<=n;i++) d[i][i]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
cin>>a;
if(j<i)
d[i][j]=d[j][i]=a;
}
prim(n);
}
return 0;
}