hdoj1102 Constructing Roads(最小生成树)

来源:互联网 发布:matlab数据毛刺 编辑:程序博客网 时间:2024/06/06 13:20

来源:http://acm.hdu.edu.cn/showproblem.php?pid=1102

求最小生成树,我这里用的是prim算法(数据结构里的背过的模版)

将已经有路的村庄之间的距离设为0.

代码如下:

#include<stdio.h>#include<iostream>#include<string>#define INF 0x7ffffffusing namespace std;int main(){int map[101][101];int lowcost[101],vis[101];int n,a,b,num,i,j,min,t,all;while(~scanf("%d",&n)){for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%d",&map[i][j]);scanf("%d",&num);for(i=0;i<num;i++){scanf("%d%d",&a,&b);map[a][b]=map[b][a]=0;}memset(vis,0,sizeof(vis));for(i=1;i<=n;i++) lowcost[i]=map[1][i];vis[1]=1;all=0;for(i=2;i<=n;i++){min=INF;for(j=1;j<=n;j++){if(min>lowcost[j]&&!vis[j]){min=lowcost[j];t=j;}}vis[t]=1;all+=min;for(j=1;j<=n;j++){if(lowcost[j]>map[t][j]&&!vis[j])lowcost[j]=map[t][j];}}printf("%d\n",all);}return 0;}


原创粉丝点击