#include<stdio.h>
#include<stdlib.h>
#define MAX 1000
#define MAXLEN 20
#define MAX_ARC_NUM 100
/*---邻接矩阵---*/
typedef char VertexType; //定义顶点类型
typedef int WeightType;
typedef struct Graph
{
VertexType vexs[MAXLEN]; //顶点表
int arc[MAXLEN][MAXLEN]; //邻接矩阵
int vexnum, arcnum; //顶点数量和边数量
}MGraph;
typedef struct Node {
// 弧的定义
VertexType head,tail;
// 边的两个端点下标。
WeightType weight ;
// 该弧相关信息的指针
} EdgeNode;
typedef struct {
// 图的定义
VertexType vexs[MAXLEN];
// 顶点信息
EdgeNode edgelist[MAX_ARC_NUM];
// 边集信息
int vexnum, arcnum; // 顶点数,弧数
} EGraph;
/*---查询顶点的下标---*/
int locate(MGraph G, VertexType ch)
{
int i = 0;
while (G.vexs[i] != ch)
i++;
return i;
}
int locate(EGraph G, VertexType ch)
{
int i = 0;
while (G.vexs[i] != ch)
i++;
return i;
}
/*---构建图---*/
void CreateMGraph(MGraph &G)
{
int i,j,k;
int weight ;
VertexType v1;
VertexType v2;
printf("\n\n请输入无向网G的顶点数和边数(用逗号隔开) : ");
scanf("%d,%d",&G.vexnum,&G.arcnum);
fflush(stdin);
//建立顶点数组
for(i=0;i<G.vexnum;i++)
{
printf("请输入第%d个顶点的值(以字符型表示) : ",i+1);
scanf("%c",&G.vexs[i]);
fflush(stdin);
}
//初始化邻接矩阵
for (i=0; i<G.vexnum; i++)
for (j=0; j<G.vexnum; j++)
{
if(i == j) G.arc[i][j] = 0;
else
G.arc[i][j] = MAX;
}
k=0;
while (k<G.arcnum) //k为顶点数
{
printf("\n请输入第%d条边的信息(head,tail,weight):",k+1);
fflush(stdin);
scanf("%c,%c,%d", &v1,&v2,&weight);
i = locate(G,v1); // 得出输入字符的序号,然后在邻接矩阵输入相应信息
j = locate(G,v2);
G.arc[i][j] = weight;
G.arc[j][i] = G.arc[i][j];
k++;
}
}
void PrintMGraph(MGraph G)
{
int i,j;
printf("当前图的存储MGraph如下:\n"
普里姆算法与克鲁斯卡尔算法之最小生成树
最新推荐文章于 2022-11-29 21:17:48 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)