ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

邻接矩阵(无向网)

2022-01-18 04:31:14  阅读:213  来源: 互联网

标签:无向网 AdjMatrix vexnum int 邻接矩阵 vex printf 顶点


  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 }

 

标签:无向网,AdjMatrix,vexnum,int,邻接矩阵,vex,printf,顶点
来源: https://www.cnblogs.com/lvhui123/p/15816207.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有