图的Prim算法实现
2015-02-13 15:02
141 查看
图的Prim算法实现最小生成树
#include <iostream> using namespace std; #define MAX_V 100 //定义最大顶点个数 #define INF 1000 //表示正无穷 typedef struct VertexType { int number;//顶点标号 };//顶点类型 typedef struct MGraph//图的定义 { int matrix[MAX_V][MAX_V];//邻接矩阵 int weight[MAX_V][MAX_V];//存放权值 int v;//顶点数 int e;//边数 VertexType vertax[MAX_V];//存放顶点信息 };//图的邻接矩阵类型 bool visited[MAX_V]; //全局变量记录访问结点 void CreateMGragh(MGraph *G) { int i,j,m,weight; cout << "请输入顶点数和边数:" << endl; cin >> G->v >> G->e ; cout << "请输入顶点信息:" << endl; for (i=0;i<G->v;i++) { scanf("%d",&G->vertax[i].number);//输入顶点信息,建立顶点表 } for (i=0;i<G->v;i++)//初始化邻接矩阵 for (j=0;j<G->v;j++) { G->matrix[i][j]=0; G->weight[i][j]=INF;//让所有权值不存在 } for(i=0;i<G->v;i++)//是结点自身指向自身权值为0 for(j=0;j<G->v;j++) if(i==j) G->weight[i][j]=0; cout << "输入每条边的首尾顶点序号及权值:" << endl; for (m=0;m<G->e;m++) { cin >> i >> j >> weight; // >> weight; G->matrix[i][j]=1; G->matrix[j][i]=1; G->weight[i][j]=weight; G->weight[j][i]=weight; } } void DisplayMGragh(MGraph *G)//输出邻接矩阵G { int i,j; for(i=0;i<G->v;i++) { for(j=0;j<G->v;j++) printf("%5d",G->matrix[i][j]); printf("\n"); } cout << endl; } void DisplayMGragh_W(MGraph *G)//输出权值矩阵G { int i,j; for(i=0;i<G->v;i++) { for(j=0;j<G->v;j++) printf("%5d",G->weight[i][j]); printf("\n"); } cout << endl; } void Prim(MGraph *G) { int LOW[G->v]; int CLOSE[G->v]; bool visited[G->v]; int i,j,k,t; int min; for(i = 0; i < G->v; i++) // 记录所有结点为未访问 { visited[i] = false; } for(i = 0; i < G->v; i++) //以0结点为初始结点 { LOW[i] = G->weight[0][i]; CLOSE[i] = 0; } visited[0] = true; for(i = 1; i < G->v; i++) { min = INF;//LOW[i]; //k = i; for(j = 0; j < G->v; j++) if( visited[j] == false && LOW[j] != 0 ) { if(LOW[j] < min) { min = LOW[j]; k = j; } } cout << "(" << k << "," << CLOSE[k] << ")" << endl; visited[k] = true; for(j = 0; j < G->v; j++) { if(visited[j] != true) { if(G->weight[k][j] < LOW[j] || LOW[j] == 0) { LOW[j] = G->weight[k][j]; CLOSE[j] = k; } } } } } int main() { MGraph *M; M = new MGraph; CreateMGragh(M); DisplayMGragh(M); DisplayMGragh_W(M); Prim(M); return 0; }
相关文章推荐
- 最小生成树——prim算法实现
- 无向图的最小支撑树Prim算法的实现
- 无向图的最小生成树算法的C程序实现代码(Prim算法)
- Prim算法实现最小生成树MST
- prim算法构造最小生成树(邻接表和数组两种存储方式实现)
- 求图的最小生成树之--Prim算法实现
- PHP实现图的邻接矩阵及普里姆(prim算法),弗洛伊德(floyd),迪杰斯特拉(dijkstra)算法
- Prim算法实现类
- zoj2048//POJ 1751 最小生成树Prim算法实现
- 最小生成树Prim算法实现
- 最小生成树Prim算法实现
- hdu 1863 畅通工程(prim算法实现和kruskal算法实现)
- 最小生成树 Prim算法的实现及应用
- 最小生成树问题中Kruskal算法和Prim算法的C语言实现
- Prim算法实现(详细伪码)
- prim算法(C++实现)
- 基于邻接矩阵的Prim算法(C语言实现)
- Prim算法实现
- poj1789 Truck History(Prim算法实现)
- 最小生成树之Prim算法的实现