hdu 1223 最小生成树 (MST)

来源:互联网 发布:蚁群算法详解 编辑:程序博客网 时间:2024/05/24 05:42

prim和dijkstra还真是像啊,我把更新距离给搞混了


prim:  if(edge[u][j]<lowcost[j])

lowcost[j]=edge[u][j];


dijkstra if(lowcost[j]+edge[u][j]<lowcost[j])

lowcost[j]=lowcost[j]+edge[u][j];



#include<bits/stdc++.h>using namespace std;int a[105][105];int lowcost[105];bool vis[106];int sumweight;int n;void prim(int v0){sumweight=0;int i,j,k;vis[v0]=1;for(i=1;i<=n;i++){lowcost[i]=a[v0][i];}for(i=1;i<n;i++){int u;int minn=0x3f3f3f3f;for(j=1;j<=n;j++){if(!vis[j]&&minn>lowcost[j]){u=j;minn=lowcost[j];}}sumweight+=minn;vis[u]=1;for(k=1;k<=n;k++){if(!vis[k]&&a[u][k]<lowcost[k]){lowcost[k]=a[u][k];}}}cout<<sumweight<<endl;}int main(){std::ios::sync_with_stdio(false);int x,y,z;while(cin>>n){if(n==0)break;memset(vis,0,sizeof(vis));memset(a,0,sizeof(a));int i,j,k;for(i=0;i<n*(n-1)/2;i++){cin>>x>>y>>z;a[x][y]=a[y][x]=z;}prim(1);}}


0 0