POJ - 1251【最小生成树模板 prim/kruskal

prim算法 

#include "iostream"
#include "cstring"
#define INF 1<<29
using namespace std;
int vst[30],mapp[30][30],dis[30];//dis记录未被加入集合的点到集合的最短距离

void init(int n){//初始化mapp
    for(int i=0;idis[j]){
                minn=dis[j];//选择到集合距离最短的点,更新最短距离,并记录该点
                k=j;  //记录该点
            }
        vst[k]=1; //标记到集合距离最短的点已经被访问过
        for(int j=0;jmapp[k][j])
                dis[j]=mapp[k][j];  //更新所有与该集合的最近距离
    }
     for(int j=1;j>n&&n){
        int t,l;
        char x,y,z='A';
        init(n);
        memset(vst,0,sizeof(vst));
        for(int i=0;i>x>>t;
            while(t--){
                cin>>y>>l;
                mapp[x-z][y-z]=l;
                mapp[y-z][x-z]=l;
            }
        }
        prim(n);
    }
    return 0;
}

 

 Kruskal算法

tol没有清零,卡了一下

#include "iostream"
#include "cstring"
#include "algorithm"
using namespace std;
int fath[40],tol;
struct Edge{
    int u,v,w;//u起点,v终点,w权值
}edge[200];

bool cmp(Edge a,Edge b){
    return a.w>n&&n){
        tol=0;       //tol记得清零
        int t,l;
        char x,y,z='A';
        memset(fath,0,sizeof(fath));
       // memset(edge,0,sizeof(edge));
        for(int i=0;i>x>>t;
            while(t--){
                cin>>y>>l;
                edge[tol].u=x-z;
                edge[tol].v=y-z;
                edge[tol++].w=l;//cout<

 

你可能感兴趣的:(POJ,最小生成树)