图论——邻接矩阵表示法;最小生成树的Kruskal算法和Prim算法

(1)-邻接矩阵表示法

构成:    顶点数量,边数量;   顶点的下标(一维数组),边的信息(二维数组).

#include
using namespace std;
int maxsize=100;
int maxnum=32767;

typedef struct{
    int edgenum,vecnum;
    int *point;
    int weight[100][100];
}AMGraph;

void CreateWuXiangGraph(AMGraph &g,int v,int e){
    g.edgenum=e;        g.vecnum=v;
    g.point=new int[v];
    for(int i=0;i>v1>>v2>>ee;
        g.weight[v1][v2]=ee;    //g.weight[v2][v1]=ee;
    }
}

void ShowGraph(AMGraph g){
    for(int i=0;i"<<"V"<

(2)-图的最小生成树

1.Prim算法; 以某顶点为起点,逐步找各顶点上最小权值来构建最小生成树.

void Prim(AMGraph g){
    int MinPoint[g.vecnum];
    int MinWeight[g.vecnum];
    for(int i=0;iMinWeight[j]){
                minnum=MinWeight[j];
                k=j;
            }
              MinWeight[k]=0;
             cout<<"V"<"<<"V"<g.weight[k][j]){
                     MinWeight[j]=g.weight[k][j];
                     MinPoint[j]=k;
                 }
             }
    }
}

2.Kruskal算法:以边为目标,逐步根据权值的大小的构建最小生成树

typedef struct{
    int head,tail;
    int weight;
}Edge,*PEdge;

PEdge Sort(AMGraph g){
    PEdge e=new Edge[g.edgenum];
    int k=0;
    for(int i=0;ie[j].weight){
                Edge tmp=e[j];
                e[j]=e[i];
                e[i]=tmp;
            }
        return e;
}

int Find(int *visited,int f){
    while(visited[f])
        f=visited[f];
    return f;
}

void Kruskal(AMGraph g){
    PEdge e=Sort(g);
    int visited[g.vecnum]={0};
    for(int i=0;iV"<

 

你可能感兴趣的:(数据结构)