用邻接矩阵表示图(代码)和简化版代码

简介: 用邻接矩阵表示图(代码)和简化版代码
 1 //用邻接矩阵表示图
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #define MaxVertexNum 20
 5  
 6 typedef int WeightType;
 7 typedef char DataType;
 8 typedef struct GNode *PtrToGNode;
 9 typedef PtrToGNode MGraph;        //以邻接矩阵存储的图类型
10  
11 struct GNode {
12     int Nv;        //顶点数
13     int Ne;        //边数
14     WeightType G[MaxVertexNum][MaxVertexNum];
15     DataType Data[MaxVertexNum];    //存顶点的数据
16 };
17  
18  
19  
20 //初始化一个有VertexNUm个顶点但没有边的图
21 typedef int Vertex;    //用顶点下标表示顶点,为整型
22 MGraph CreateGraph(int VertexNum)
23 {
24     Vertex v, w;
25     struct GNode* Graph;
26     Graph = (MGraph)malloc(sizeof(struct GNode));
27     Graph ->Nv = MaxVertexNum;
28     Graph ->Ne = 0;
29  
30     //这里的默认编号从0开始,到(Graph->Nv - 1)
31     for (v = 0; v < Graph->Nv; v++)
32     for (w = 0; w < Graph->Ne; w++)
33         Graph->G[v][w] = 0;
34  
35     return Graph;
36 }
37  
38 //向MGraph中插入边
39 typedef struct ENode *PtrToENode;
40 struct ENode {
41     Vertex v1, v2;        //有向边<v2, v1>
42     WeightType Weight;    //权重
43 };
44 typedef PtrToENode Edge;
45  
46 void InsertEdge(MGraph Graph, Edge E)
47 {
48     //插入边<v1, v2>
49     Graph->G[E -> v1][E->v2] = E->Weight;
50  
51     //插入边<v2, v1>
52     Graph->G[E->v2][E->v1] = E->Weight;
53 }
54  
55 //完整地建立一个MGraph
56 MGraph BuildGraph()
57 {
58     MGraph Graph;
59     Edge E;
60     Vertex V;
61     int Nv, i;
62     scanf_s("%d", &Nv);
63     Graph = CreateGraph(Nv);
64     scanf_s("%d", &(Graph->Ne));
65     if (Graph->Ne != 0)
66     {
67         E = (Edge)malloc(sizeof(struct ENode));
68         for (i = 0; i < Graph->Ne; i++)
69             scanf_s("%d %d %d", &E->v1, &E->v2, &E->Weight);
70         InsertEdge(Graph, E);
71     }
72  
73     //
74     for (V = 0; V < Graph->Nv; V++)
75         scanf_s(" %c", Graph->Data[V]);
76  
77     return Graph;
78 }
79  
80  
81  
82 int main()
83 {
84  
85  
86     return 0;
87 }

简化版:

 1 //用邻接矩阵表示图
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4  
 5 #define MaxN 20
 6 int G[MaxN][MaxN], Nv, Ne;
 7 void BuildGraph()
 8 {
 9     int i , j, v1, v2, w;
10     scanf("%d", &Nv);
11  
12     for (i = 0; i < Nv; i++)
13     for (j = 0; j < Nv; j++)
14         G[i][j] = 0;
15     scanf_s("%d", &Ne);
16     for (i = 0; i < Ne; i++)
17     {
18         scanf_s("%d %d %d", &v1, &v2, &w);
19         
20         G[v1][v2] = w;        //InsertEdge
21         G[v2][v1] = w;
22     }
23 }


相关文章
|
6月前
|
存储 容器
邻接表的用法
邻接表的用法
|
6月前
|
Python
Python实现递归的方式来生成斐波那契数列
Python实现递归的方式来生成斐波那契数列
|
2月前
|
机器学习/深度学习 存储 算法
经典算法代码
这段代码展示了多个经典算法,包括:穷举法解决“百钱买百鸡”问题;递推法计算“猴子吃桃”问题;迭代法求解斐波那契数列及折纸高度超越珠峰的问题。同时,还提供了希尔排序算法实现及披萨票务订购系统和汉诺塔问题的链表存储解决方案。每部分通过具体案例解释了算法的应用场景与实现方法。
30 3
|
5月前
|
存储 算法 安全
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
38 0
【C++&数据结构】超详细一文带小白轻松全面理解 [ 二叉搜索树 ]—— [从零实现&逐过程分析&代码演示&简练易懂](23)
【C++&数据结构】超详细一文带小白轻松全面理解 [ 二叉搜索树 ]—— [从零实现&逐过程分析&代码演示&简练易懂](23)
|
6月前
|
算法 Java
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
数据结构-构造哈夫曼树【详解+代码+图示】一文解惑!
2422 0
链表翻转循环和递归写法(画图分析)
链表翻转循环和递归写法(画图分析)
32 0
|
存储 C++ 容器
使用C++编写一个图的深度和广度优先遍历的代码
使用C++编写一个图的深度和广度优先遍历的代码
110 0
|
存储 算法
【数据结构】图邻接矩阵的创建完整代码
【数据结构】图邻接矩阵的创建完整代码
320 0