zoukankan      html  css  js  c++  java
  • 图的存储结构—————邻接矩阵

     1 #include "stdio.h"
     2 #include "stdlib.h"
     3 #define Max_vertex_num 20//顶点数目最大值
     4 #define INFINITY 32768
     5 typedef char VertexData;//顶点数据类型
     6 typedef int EdgeType;//边权数据类型
     7 typedef struct {
     8 VertexData vertex[Max_vertex_num];//一维数组存储顶点信息
     9 EdgeType edge[Max_vertex_num][Max_vertex_num];//存储顶点之间关联关系的二维数组
    10 int vexnum, arcnum;//图中顶点数和弧数
    11 }MGraph;
    12 //无向图的邻接矩阵是对称矩阵,可以采用特殊矩阵的压缩法,只存储下三角即可
    13 //n个顶点需1+2+...+n=n(n-1)/2个存储空间,而有向图的邻接矩阵不一定是对阵矩阵,
    14 //故需要n*n个存储空间
    15 //对于稀疏图来说,不适于用邻接矩阵来存储,会造成空间的浪费
    16 //采用邻接矩阵创建有向图
    17 //1.求顶点位置函数
    18 int LocateVertex(MGraph* G, VertexData v) {
    19 int j=-1, k;
    20 for(k=0;k<G->vexnum;k++)
    21 if (G->vertex[k] == v) {
    22 j = k;
    23 break;
    24 }
    25 return j;
    26 }
    27 //创建有向图
    28 void CreateDN(MGraph *G) {
    29 int i, j, k,weight;
    30 VertexData v1, v2;
    31 scanf_s("%d,%d", &G->vexnum, &G->arcnum);
    32 for (i = 0; i < G->vexnum; i++)
    33 for (j = 0; j < G->vexnum; j++)
    34 G->edge[i][j] = INFINITY;
    35 for (i = 0; i < G->vexnum; i++)
    36 scanf_s("%c", &G->vertex[i]);
    37 for (k = 0; k < G->arcnum; k++) {
    38 printf("输入顶点<v1,v2>及其权值:
    ");
    39 scanf_s("%c,%c,%d", &v1, &v2, &weight);
    40 i = LocateVertex(G, v1);
    41 j = LocateVertex(G, v2);
    42 G->edge[i][j] = weight;
    43 } 
    44 }
    45 int main() {
    46 MGraph G;
    47 CreateDN(&G);
    48 system("pause");
    49 return 0;
    50 }
    努力的意义就是放眼望去以后都是喜欢的人和事......
  • 相关阅读:
    使用knockout.js 完毕template binding
    站点建设价格为什么有高有低?站点建设该怎样选择?
    同余 模算术 中国剩余定理
    linux 命令之 apt-get
    [Leetcode]-Reverse Integer
    《Python入门》Windows 7下Python Web开发环境搭建笔记
    javascript之Ajax起步
    SQL server 2012 安装SQL2012出现报错: 启用 Windows 功能 NetFx3 时出错
    C# 反射具体解释
    java8_api_jni
  • 原文地址:https://www.cnblogs.com/Lorrained/p/15167424.html
Copyright © 2011-2022 走看看