最小生成树
来源:互联网 发布:gs域名注册 编辑:程序博客网 时间:2024/04/29 15:54
# include <stdio.h>
# define MAX_VERTEX_NUM 20
# define INFINITY 32768
# define Error -1
# define OK 1
typedef int AdjType;
typedef enum{DG,DN, UDG,UDN} GraphKind;
typedef char VertexData;
struct
{
VertexData adjvex;
int lowcost;
}closedge[MAX_VERTEX_NUM];
typedef struct ArcNode
{
AdjType adj;
// OtherInfo info;
}ArcNode;
typedef struct
{
VertexData vertex[MAX_VERTEX_NUM];
ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vernum, arcnum;
GraphKind kind;
}AdjMatrix;
int LocateVertex(AdjMatrix *g, VertexData v) //求顶点位置函数
{
int j = Error, k;
for (k = 0; k <g->vernum; k++)
if (g->vertex[k] == v)
{
j = k;break;
}
return j;
}
int CreateDN(AdjMatrix *g) //创建图的邻接矩阵
{
int i,j,k,weight;
VertexData v1, v2;
printf("请输入图的顶点数和弧数\n");
scanf("%d%d", &g->vernum, &g->arcnum);
for (i = 0; i < g->vernum;i++)
for (j = 0; j < g->vernum; j++)
g->arcs[i][j].adj = INFINITY;
printf("请输入图的顶点\n");
getchar();
for (i = 0; i < g->vernum; i++)
scanf("%c", &g->vertex[i]);
printf("请输入每条弧的两个顶点及权值\n");
getchar();
for (k = 0; k < g->arcnum; k++)
{
scanf("%c%c%d%c", &v1,&v2,&weight);
i = LocateVertex(g,v1);
j = LocateVertex(g,v2);
g->arcs[i][j].adj = weight;
g->arcs[j][i].adj = weight;
}
/* for (i = 0; i<g->vernum ;i++)
{
for (k=0; k < g->vernum ;k++)
printf("%d ",g->arcs[i][k].adj);
printf("\n");
}
*/ return OK;
}
int Minium(AdjMatrix *g) //找去closedge[]中最小边的信息
{
int i,index,sum = INFINITY;
for (i = 0; i < g->vernum; i++)
if (closedge[i].lowcost != 0 && sum > closedge[i].lowcost)
{
sum = closedge[i].lowcost;
index = i;
}
return index;
}
void MiniSpanTree_prim(AdjMatrix *g,VertexData u) //普利姆算法(最小生成树)
{
int i,k,k0,j;
VertexData v0,u0;
k = LocateVertex(g,u);
closedge[k].lowcost = 0;
for (i = 0; i < g->vernum ; i++)
if (i!= k)
{
closedge[i].adjvex = u;
closedge[i].lowcost = g->arcs[k][i].adj;
}
printf("最小生成树的边为\n");
for (j = 1; j < g->vernum ; j++)
{
k0 = Minium(g);
u0 = closedge[k0].adjvex;
v0 = g->vertex[k0];
printf("%c%c\n",u0,v0);
closedge[k0].lowcost = 0;
for (i = 0; i < g->vernum ; i++)
if (g->arcs[k0][i].adj < closedge[i].lowcost)
{
closedge[i].lowcost = g->arcs[k0][i].adj;
closedge[i].adjvex = v0;
}
}
}
int main(void)
{
VertexData u;
AdjMatrix g;
CreateDN(&g);
printf("请输入最小生成树的开始顶点\n");
scanf("%c", &u);
MiniSpanTree_prim(&g,u);
return 0;
}
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- IOS——地图的使用、地图定位到当前位置(包括ios8获取位置)、地图标注的添加、地图放大缩小监听
- oracle - 作报表需要的一些sql
- android Coordinating activities
- JSP页面无故报错 javax.servlet.jsp.PageContext cannot be resolved to a type
- 中本聪top开发日记--自适应的小卡片
- 最小生成树
- poj 1017 Packets 贪心 盒子放置问题
- 回溯之n元素数组取r个数的排列
- [C/C++标准库]_[初级]_[使用模板删除字符串前后空格((w)string space)]
- django 模板中无法实现计算,收集的方案。在django template 中实现乘法,除法运算
- android EditText inputType说明
- ZooKeeper 处理master, slaves, client 关系
- 23种设计模式-设计模式总结
- ashx上传绕过