hdu 1102 最小生成树 prim

来源:互联网 发布:淘宝找货神器 编辑:程序博客网 时间:2024/06/07 00:24


prim算法 具体演示 ,在百度百科有详细解说。

#include <stdio.h>#include <stdlib.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;int n,Q,map[105][105],sum,dis[105],vis[105];void prim(){int i,j,minn,t;memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));dis[1] = 0; vis[1] = 1;for(i = 2; i <= n; i++){dis[i] = map[1][i];}for(j = 2; j <= n; j++){minn=0x3f3f3f3f;for(i = 1; i <= n; i++){if(!vis[i] && dis[i] < minn){minn = dis[i];t = i;}}vis[t] = 1;sum += dis[t];for(i = 2; i <= n; i++){if(!vis[i] && map[i][t] < dis[i]){dis[i] = map[i][t];}}}}int main(){//freopen("t.txt","r",stdin);int i,j,a,b;while(~scanf("%d",&n)){sum = 0;memset(map,0x3f,sizeof(map));for(i = 1; i <= n; i++){for(j = 1; j <= n; j++){scanf("%d",&map[i][j]);}}scanf("%d",&Q);for(i = 0; i < Q; i++){scanf("%d%d",&a,&b);map[a][b] = map[b][a] = 0;}prim();printf("%d\n",sum);}} 



1 0