Java教程

邻接矩阵(无向网)

本文主要是介绍邻接矩阵(无向网),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  1 /**********************************************************************************
  2 *Name: 邻接矩阵(无向网)
  3 *Date: 2022.01.18
  4 *Author: 吕辉
  5 *Description: 图的邻接矩阵是表示顶点之间相邻关系的矩阵,是顺序存储结构,
  6 *             因此也称为“数组表示法”。它采用两个数组分别来存储图的顶点
  7 *             和边(弧)的信息。其中,用一个一维数组来存储顶点信息,一个二维
  8 *             数组来存储边(弧)的信息。事实上,这里的邻接矩阵主要指的是这个
  9 *             二维数组。---《数据结构与算法(王曙燕)》
 10 ***********************************************************************************/
 11 #define _CRT_SECURE_NO_WARNINGS
 12 #include <stdio.h>
 13 #include <stdlib.h>
 14 
 15 #define MAXVEX 20/*最大顶点个数*/
 16 #define INFINITY 32767/*表示极大值∞*/
 17 typedef struct
 18 {
 19     int arcs[MAXVEX][MAXVEX];/*边(弧)信息*/
 20     char vex[MAXVEX];/*顶点信息,这里顶点类型设置为字符型*/
 21     int vexnum;/*顶点数目*/
 22     int arcnum;/*边(弧)数目*/
 23 }AdjMatrix;/*邻接矩阵(Adjacency Matrix)*/
 24 
 25 void Create(AdjMatrix* G);
 26 int LocateVex(AdjMatrix* G, char vex);
 27 void Print(AdjMatrix* G);
 28 
 29 int main(void)
 30 {
 31     AdjMatrix G;
 32     Create(&G);
 33     Print(&G);
 34     system("pause");
 35     return 0;
 36 }
 37 /***************************************************
 38 * Function: Create
 39 * Description: 用邻接矩阵创建无向网
 40 * Called By: main
 41 * Call: LocateVex
 42 * Parameter : G 图
 43 ****************************************************/
 44 void Create(AdjMatrix* G)
 45 {
 46     int i = 1;
 47     int j = 1;
 48     int k = 1;
 49     int weight = 0;
 50     char vex1 = '\0';
 51     char vex2 = '\0';
 52 
 53     printf("请输入无向网中的顶点数和边数(逗号分隔):\n");
 54     scanf("%d%*c%d", &G->vexnum, &G->arcnum);
 55     for (i = 1; i <= G->vexnum; i++)
 56     {
 57         for (j = 1; j <= G->vexnum; j++)
 58         {
 59             G->arcs[i][j] = INFINITY;
 60         }
 61     }
 62     printf("请输入无向网中%d个结点:\n", G->vexnum);
 63     for (i = 1; i <= G->vexnum; i++)
 64     {
 65         printf("第%d个顶点:",  i);
 66         scanf(" %c", &G->vex[i]);/*%c前均有一个空格,用于吸收缓冲区的空白字符*/
 67     }
 68     printf("请输入无向网中%d条边:\n", G->vexnum);
 69     for (k = 1; k <= G->arcnum; k++)
 70     {
 71         printf("从顶点:");
 72         scanf(" %c", &vex1);
 73         printf("到顶点:");
 74         scanf(" %c", &vex2);
 75         printf("权值为:");
 76         scanf("%d", &weight);
 77         i = LocateVex(G, vex1);
 78         j = LocateVex(G, vex2);
 79         G->arcs[i][j] = weight;
 80         G->arcs[j][i] = weight;
 81     }
 82 }
 83 /*************************************************************
 84 * Function: LocateVex
 85 * Description: 返回输入顶点在顶点数组中的位置
 86 * Called By: Create
 87 * Parameter : G 图
 88 *                      vex 顶点
 89 * Return:    若G中存在顶点vex,则返回该顶点在顶点数组中下标
 90 *                否则返回 0
 91 **************************************************************/
 92 int LocateVex(AdjMatrix* G, char vex)
 93 {
 94     int i = 1;
 95     for (i = 1; i <= G->vexnum; i++)
 96     {
 97         if (G->vex[i] == vex)
 98         {
 99             return i;
100         }
101     }
102     return 0;
103 }
104 /*************************************************************
105 * Function: Print
106 * Description: 打印邻接矩阵
107 * Called By: main
108 * Parameter : G 图
109 **************************************************************/
110 void Print(AdjMatrix* G)
111 {
112     int i = 1;
113     int j = 1;
114     printf("邻接矩阵为:\n");
115     for (i = 1; i <= G->vexnum; i++)
116     {
117         for (j = 1; j <= G->vexnum; j++)
118         {
119             printf("%d\t", G->arcs[i][j]);
120         }
121         printf("\n");
122     }
123 }

 

这篇关于邻接矩阵(无向网)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!