图的定义和建立的简单使用

图就是多对多的关系,每个结点都可能与多个结点有关系,结点之间的关系是任意的,图中任意两个结点都可以相关,所以图的应用极其广泛,

而研究某一个结构上面的操作,就先要让他可以在计算机中表示,即怎么存储他,由于图的结构比较复杂,任意两个结点之间都可能存在关系,

所以无法使用物理位置来表示元素之间的关系,所以一般使用二维数组来表示图之间的关系,即邻接矩阵法,另外图中任意两个结点之间都可能存在关系,所以也可以使用链式存储,

1.邻接矩阵法表示图

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100

typedef struct 
{
    int vex[Maxsize];
    int arcs[Maxsize][Maxsize];
    int vexnum;
    int arcsnum;
}Graph;

 

2.邻接表表示图

#include<stdio.h>
#include<stdlib.h>
#define Maxsize 100

typedef struct ArcNode
{
    int adjvex;
    struct ArcNode* nextarc;
}ArcNode;

typedef struct 
{
    int data;
    ArcNode* next;
}VNode;

typedef struct 
{
    VNode vertices[Maxsize];
    int vexnum, arcnum;
};

3.使用邻接矩阵创建图

void createGraph(Graph* G) 
{
    scanf("%d,%d", &G->vexnum, &G->arcsnum);
    for (int i = 0; i < G->vexnum; i++)
    {
        int e = 0;
        scanf("%d", e);
        G->vex[i] = e;
    }
    for (int i = 0; i < G->vexnum; i++)
    {
        for (int j = 0; j < G->vexnum; j++) 
        {
            G->arcsnum[i][j] = 0;
        }
    }
    for (int i = 0; i < G->arcsnum; i++)
    {
        int a, b, c = 0;
        scanf("%d,%d,%d", &a. & b, &c);
        G->arcs[a][b] = c;
    }

}

 

好了,我们下回见,peace

posted @ 2020-08-11 17:30  野评测  阅读(245)  评论(0)    收藏  举报