Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
有重边In Reply To:why WA??prim Posted by:BJ051155 at 2007-08-01 10:51:01 > #include <stdio.h> > int vexnum,roadnum; > int adj[100][100],mincost[100],res=0; > bool linked[100]; > > void createCraph() > { > scanf("%d",&vexnum); > for(int i=0;i<vexnum;i++) > { > mincost[i]=1005; > for(int j=0;j<vexnum;j++) > scanf("%d",&adj[i][j]); > } > scanf("%d",&roadnum); > int a,b,temp=roadnum; > while(temp--) > { > scanf("%d%d",&a,&b); > linked[a-1]=linked[b-1]=1; > } > if(roadnum) > { > for(int k=0;k<vexnum;k++) > for(int j=0;j<vexnum;j++) > if(!linked[k]&&linked[j]&&adj[k][j]<mincost[k]) > mincost[k]=adj[k][j]; > } > } > > void prim() > { > int min,id=-1,i,j,k; > for(i=1;i<vexnum-roadnum;i++) > { > min=1005; > for(j=0;j<vexnum;j++) > if(mincost[j]<min) > { > min=mincost[j]; > id=j; > } > if(id>=0) > { > res+=min; > linked[id]=1; > mincost[id]=1005; > for(j=0;j<vexnum;j++) > if(!linked[j]&&adj[j][id]<mincost[j]) > mincost[j]=adj[j][id]; > } > else > { > int id1,id2; > for(j=0;j<vexnum;j++) > for(k=0;k<vexnum;k++) > if(j!=k&&adj[j][k]<min) > { > min=adj[j][k]; > id1=j; > id2=k; > } > linked[id1]=linked[id2]=1; > mincost[id1]=mincost[id2]=1005; > res+=min; > for(k=0;k<vexnum;k++) > for(j=0;j<vexnum;j++) > if(!linked[k]&&linked[j]&&adj[k][j]<mincost[k]) > mincost[k]=adj[k][j]; > } > } > } > int main(int argc, char* argv[]) > { > createCraph(); > prim(); > printf("%d\n",res); > return 0; > } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator