#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxInt 35537//表示极大值∞
#define MVNUM 100//最大顶点数
typedef char VertexType;
typedef int ArcType;
typedef struct {
VertexType vertex[MVNUM];//顶点表
ArcType arcs[MVNUM][MVNUM];//领接矩阵
int vexnum, arcnum;//图的当前点数与边数
}AMGragh;//Adjacency Matrix Graph
/*
算法思想
(1)输入总顶点数和总边数
(2)依次输入点的信息存入顶点表中
(3)初始化领接矩阵,使每个权值初始化为极大值
(4)构造领接矩阵
*/
int LocateVex(AMGragh G, VertexType v)//定位函数
{
for (int i = 0; i < G.vexnum; i++)
{
if (v == G.vertex[i]) return i;
}
}
void CreateUDN(AMGragh* G)//构造无向网
{
printf("请输入顶点的个数和边的个数:\n");
scanf("%d %d", &((*G).vexnum), &((*G).arcnum));
printf("请输入顶点:\n");
rewind(stdin);
for (int i = 0; i < (*G).vexnum; i++)
{
scanf("%c", &((*G).vertex[i]));
}
for (int i = 0; i < (*G).vexnum; i++)
{
for (int j = 0; j < (*G).vexnum; j++)
{
(*G).arcs[i][j] = MaxInt;
}
}
for (int k = 0; k < (*G).arcnum; k++)
{
char v1, v2;
int w;
int i, j;
printf("请输入2个顶点及其权值:\n");
rewind(stdin);
scanf("%c%c%d", &v1, &v2, &w);
i = LocateVex(*G, v1);
j = LocateVex(*G, v2);
(*G).arcs[i][j] = w;
(*G).arcs[j][i] = (*G).arcs[i][j];
printf("\n输入的值:%c %c %d (%d,%d)\n", v1, v2, w, i, j);
}
}
int main()
{
AMGragh G;
CreateUDN(&G);
for (int i = 0; i < G.vexnum; i++)
{
for (int j = 0; j < G.vexnum; j++)
{
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
return 0;
}
领接矩阵的C语言实现
最新推荐文章于 2024-10-02 16:39:03 发布
该代码段展示了如何在C++中定义并使用宏来创建一个无向网的邻接矩阵,包括定义顶点、边的最大数量,以及输入和初始化图的数据结构。CreateUDN函数用于构造无向网,通过用户输入构建图的顶点和边,并存储在邻接矩阵中。
摘要由CSDN通过智能技术生成