第13周 项目-验证算法(Prim算法的验证)
2016-11-24 10:15
288 查看
问题及描述:
头文件:
a.cpp
主函数:
#include <stdio.h>
#include <malloc.h>
#include "head.h"
int main()
{
MGraph g;
int A[6][6]=
{
{0,10,INF,INF,19,21},
{10,0,5,6,INF,11},
{INF,5,0,6,INF,INF},
{INF,6,6,0,18,14},
{19,INF,INF,18,0,33},
{21,11,INF,14,33,0}
};
ArrayToMat(A[0], 6, g);
printf("最小生成树构成:\n");
Prim(g,0);
return 0;
}
运行结果:
头文件:
#ifndef GRAPH_H_INCLUDED #define GRAPH_H_INCLUDED #define MAXV 100 //最大顶点个数 #define INF 32767 //INF表示∞ typedef int InfoType; //以下定义邻接矩阵类型 typedef struct { int no; //顶点编号 InfoType info; //顶点其他信息,在此存放带权图权值 } VertexType; //顶点类型 typedef struct //图的定义 { int edges[MAXV][MAXV]; //邻接矩阵 int n,e; //顶点数,弧数 VertexType vexs[MAXV]; //存放顶点信息 } MGraph; //图的邻接矩阵类型 void ArrayToMat(int *Arr, int n, MGraph &g); //用普通数组构造图的邻接矩阵 void DispMat(MGraph g);//输出邻接矩阵g void Prim(MGraph g,int v);//prim算法 #endif // GRAPH_H_INCLUDED
a.cpp
#include <stdio.h> #include <malloc.h> #include "head.h" void ArrayToMat(int *Arr, int n, MGraph &g) { int i,j,count=0; //count用于统计边数,即矩阵中非0元素个数 g.n=n; for (i=0; i<g.n; i++) for (j=0; j<g.n; j++) { g.edges[i][j]=Arr[i*n+j]; //将Arr看作n×n的二维数组,Arr[i*n+j]即是Arr[i][j],计算存储位置的功夫在此应用 if(g.edges[i][j]!=0 && g.edges[i][j]!=INF) count++; } g.e=count; } void DispMat(MGraph g) //输出邻接矩阵g { int i,j; for (i=0; i<g.n; i++) { for (j=0; j<g.n; j++) if (g.edges[i][j]==INF) printf("%3s","∞"); else printf("%3d",g.edges[i][j]); printf("\n"); } } void Prim(MGraph g,int v) { int lowcost[MAXV]; //顶点i是否在U中 int min; int closest[MAXV],i,j,k; for (i=0; i<g.n; i++) //给lowcost[]和closest[]置初值 { lowcost[i]=g.edges[v][i]; closest[i]=v; } for (i=1; i<g.n; i++) //找出n-1个顶点 { min=INF; for (j=0; j<g.n; j++) //在(V-U)中找出离U最近的顶点k if (lowcost[j]!=0 && lowcost[j]<min) { min=lowcost[j]; k=j; //k记录最近顶点的编号 } printf(" 边(%d,%d)权为:%d\n",closest[k],k,min); lowcost[k]=0; //标记k已经加入U for (j=0; j<g.n; j++) //修改数组lowcost和closest if (g.edges[k][j]!=0 && g.edges[k][j]<lowcost[j]) { lowcost[j]=g.edges[k][j]; closest[j]=k; } } }
主函数:
#include <stdio.h>
#include <malloc.h>
#include "head.h"
int main()
{
MGraph g;
int A[6][6]=
{
{0,10,INF,INF,19,21},
{10,0,5,6,INF,11},
{INF,5,0,6,INF,INF},
{INF,6,6,0,18,14},
{19,INF,INF,18,0,33},
{21,11,INF,14,33,0}
};
ArrayToMat(A[0], 6, g);
printf("最小生成树构成:\n");
Prim(g,0);
return 0;
}
运行结果:
相关文章推荐
- 第13周上机实践项目- 验证算法(1)Prim算法的验证
- 第13周 项目1 - 验证算法 - Prim算法的验证
- 第13周实践项目Prim算法验证
- 第13周项目(1)——Prim算法的验证
- 第13周项目1-Prim算法的验证
- 第13周项目4 算法验证—拓扑排序算法
- 第13周项目1-Prim算法的验证
- 【第13周-图项目1- 验证Prim算法】
- 第13周上机实践项目 - 算法验证(4)Floyd算法验证
- 第13周项目1Prim算法的验证
- 第13周上机实践项目 - 验证算法(5)拓扑排序算法验证
- 第13周项目3 算法验证—Floyd算法
- 第13周上机实践项目 - 验证算法(3)Dijkstra算法的验证
- 第13周、项目—验证算法 (1)
- 第13周项目1 Prim算法的验证
- 13周-项目1- 验证算法(Prim算法,Kruskal算法)
- 第13周项目1-Prim算法的验证
- 第13周、项目—验证算法 (3)
- 第13周、项目—验证算法 (4)
- 第13周项目1 算法验证—Prim算法+Kruskal算法