注意标号要减一才为下标,还有已建设的路长可置为0
#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include using namespace std; #define M 110 #define inf 999999999 int mat[M][M]; int prim(int n,int sta) { int mark[M],dis[M]; int i,sum=0,j,flag; for(i=0;i { dis[i]=mat[sta][i]; mark[i]=0; } mark[sta]=1; for(i=1;i { int minn=inf; for(j=0;j { if(dis[j] minn=dis[j],flag=j; } mark[flag]=1; sum+=dis[flag]; for(j=0;j { if(dis[j]>mat[flag][j]) dis[j]=mat[flag][j]; } } return sum; } int main() { int n,i,j,a,b,m; while(scanf("%d",&n)!=EOF) { for(i=0;i { for(j=0;j { scanf("%d",&mat[i][j]); } } scanf("%d",&m); for(i=0;i { scanf("%d%d",&a,&b);//原来还是这里的问题,注意下标和标号还是有区别的,要减一 mat[a-1][b-1]=mat[b-1][a-1]=0;//如果两村之间的路已经连接好,则他们之间的路程设为0 } printf("%d\n",prim(n,0)); } return 0; }