第一道prim==
还不熟练啊,仍然要设2个辅助数组==
昨天wa了数次就没做了,今天把从1开始改成从0开始果断a了啊。
-----
#include<iostream> #include<cstdlib> #include<cstring> #define INF 10000000 #define MAXN 1005 using namespace std; int n; int Edge[MAXN][MAXN]; int lowcost[MAXN]; int nearvex[MAXN]; int sum; void prim(int u0) { int i,j; memset(lowcost,0,sizeof(lowcost)); for(i=0;i<n;i++) { lowcost[i]=Edge[u0][i]; nearvex[i]=u0; } nearvex[u0]=-1; for(i=0;i<n;i++) { int min=INF; int v=-1; for(j=0;j<n;j++) { if(nearvex[j]!=-1&&lowcost[j]<min) {v=j;min=lowcost[j];} } if(v!=-1) { nearvex[v]=-1; sum+=lowcost[v]; for(j=0;j<n;j++) { if(nearvex[j]!=-1&&Edge[v][j]<lowcost[j]) { lowcost[j]=Edge[v][j]; nearvex[j]=v; } } } } cout<<sum<<endl; } int main() { int t; int price[MAXN]; int i,j; cin>>t; while(t--) { cin>>n; sum=0; for(i=0;i<n;i++) cin>>price[i]; for(i=0;i<n;i++) { for(j=0;j<n;j++) { cin>>Edge[i][j]; if(i==j) Edge[i][j]=INF; else Edge[i][j]+=price[i]+price[j]; } } prim(0); } return 0; }