点击打开链接
discuss里边的楼要塌了。。。。
本来用krusual写的,但总是不对,只好改prime了
#include"stdio.h" #include"string.h" #define INF 99999999 int map[101][101],mark[101],f[101]; int n; void prime() { int i,j,k,min,sum; memset(mark,0,sizeof(mark)); for(i=1;i<=n;i++) f[i]=map[1][i]; f[1]=0;mark[1]=1; sum=0; for(i=1;i<n;i++) { min=INF; for(j=1;j<=n;j++) { if(!mark[j]&&f[j]<min) { min=f[j];k=j; } } sum+=min; mark[k]=1; for(j=1;j<=n;j++) { if(!mark[j]&&map[k][j]<f[j]) f[j]=map[k][j]; } } printf("%d\n",sum); } int main() { int i,j,t,x,y; while(scanf("%d",&n)!=-1) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) scanf("%d",&map[i][j]); } scanf("%d",&t); for(i=0;i<t;i++) { scanf("%d%d",&x,&y); map[x][y]=map[y][x]=0; } prime(); } return 0; }