邻接矩阵数据结构程序c语言,C语言数据结构之图的邻接矩阵的应用实例

图的存储结构有 3 种形式:邻接矩阵、邻接表 和 邻接多重表

对于一个有 n 个顶点的图,其顶点信息可以用一个一维数组表示,而顶点间是否有相邻的关系,可以用邻接矩阵(Adjacency Matrix)来表示。若 G 是一个有 n 个顶点的图,则 G 的邻接矩阵 A 是具有如下性质的 n 阶方阵:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

带权的图成为网,下面给出一个程序来构建一个网的邻接矩阵:

#include

#include

#include

using namespace std;

#define INFINITY INT_MAX

#define MAX_VERTEX_NUM 20

typedef struct{

int vex[MAX_VERTEX_NUM];

int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

int vexnum,arcnum;

}mgraph;

void creatmg(mgraph *g)

{

int m,n,w;

cin>>g->vexnum>>g->arcnum; // 输入顶点的个数和边数

for(int i=0;ivexnum;i++)

for(int j=0;jvexnum;j++)

g->arcs[i][j] = INFINITY; // 初始化邻接矩阵各元素为无穷大

for(int i=0;ivexnum;i++)

cin>>g->vex[i]; // 输入顶点

for(int j=0;jarcnum;j++)

{

cin>>m>>n>>w; // 输入 arcnum 条边所对应的顶点 m, n,以及这两个顶点之间的权重 w

g->arcs[m][n] = g->arcs[n][m] = w; // 无向图的邻接矩阵的对称的

}

}

int main()

{

mgraph g;

creatmg(&g);

cout<

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用结构体实现带权无向邻接矩阵C语言代码示例: ```c #include <stdio.h> #include <stdlib.h> #define MAX_VERTICES 100 // 边的结构体 typedef struct { int v1; // 边的起点 int v2; // 边的终点 int weight; // 边的权值 } Edge; // 结构体 typedef struct { int matrix[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵 int n; // 顶点数 int m; // 边数 } Graph; // 初始化 void initGraph(Graph *g) { int i, j; g->n = 0; g->m = 0; for (i = 0; i < MAX_VERTICES; i++) { for (j = 0; j < MAX_VERTICES; j++) { g->matrix[i][j] = 0; } } } // 添加边 void addEdge(Graph *g, int v1, int v2, int weight) { g->matrix[v1][v2] = weight; g->matrix[v2][v1] = weight; g->m++; } // 创建 void createGraph(Graph *g) { int i, v1, v2, weight; printf("请输入顶点数:"); scanf("%d", &g->n); printf("请输入边的数量:"); scanf("%d", &g->m); for (i = 0; i < g->m; i++) { printf("请输入第%d条边的起点、终点和权值:", i+1); scanf("%d %d %d", &v1, &v2, &weight); addEdge(g, v1, v2, weight); } } // 打印邻接矩阵 void printGraph(Graph *g) { int i, j; printf("邻接矩阵为:\n"); for (i = 0; i < g->n; i++) { for (j = 0; j < g->n; j++) { printf("%d ", g->matrix[i][j]); } printf("\n"); } } int main() { Graph g; initGraph(&g); createGraph(&g); printGraph(&g); return 0; } ``` 上面的代码,我们定义了一个边的结构体和一个结构体使用邻接矩阵来存储程序首先会要求用户输入顶点数和边的数量,然后逐个输入每条边的起点、终点和权值,最后输出邻接矩阵

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值