zoukankan      html  css  js  c++  java
  • 用邻接矩阵表示图(代码)和简化版代码

     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 }
  • 相关阅读:
    C# 使用Enumerable.Range 打印数字
    C#中的范围类型(Range Type)
    C# 编程中的堆栈(Stack)和队列(Queue)
    C# 委托(delegate、Action、Func、predicate)
    使用线程以及对信号量 AutoResetEvent和ManualResetEvent的理解
    SQL Sever触发器的基本语法与作用
    C#控制台程序使用Log4net日志组件
    初级委托详解(C# 用委托有什么好处? 它起什么作用?)
    獲取串口數據,設置串口
    MVC 下 打包多个word到压缩包
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/9543214.html
Copyright © 2011-2022 走看看