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 }
    努力的意义就是放眼望去以后都是喜欢的人和事......
  • 相关阅读:
    prim 堆优化+ kruskal 按秩优化
    poj 2679 Adventurous Driving(SPFA 负环)
    poj 1125 Stockbroker Grapevine (dij优化 0ms)
    codevs 4909 寂寞的堆(写的好丑0.0)
    noi 7221 拯救公主 (状态压缩+bfs)
    codevs2059逃出克隆岛(传送门bfs)
    HUD3336
    poj 3974 Palindrome
    疑难杂症
    正则表达 比较两个浮点数
  • 原文地址:https://www.cnblogs.com/Lorrained/p/15167424.html
Copyright © 2011-2022 走看看