53-图的邻接矩阵存操作实例

图的邻接矩阵操作算法实现如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXV 5              //最大顶点个数
#define LIMITLESS   9999    //表示无穷大“ ∞ ”

typedef char InfoType [10];

//顶点类型
typedef struct VERTEXTYPE 
{

    int num;        //顶点编号
    InfoType info;  //顶点其他信息

} VertexType;

//图的定义:邻接矩阵
typedef struct MGRAPH{
    int n;                  //顶点数
    int e;                  //边数
    int deges[MAXV][MAXV];  //邻接矩阵
    VertexType vesx[MAXV];  //顶点类型
} MGraph;


//创建图的邻接矩阵
void CreateMGraph(MGraph *G)
{
    int i;
    int j;
    int k;
    int w;
    if(G == NULL)
    {
        return;
    }

    printf("输入顶点数和边数:");
    scanf("%d %d" , &(G->n) , &(G->e));

    printf("输入顶点信息:\n");
    for(i = 0; i < G->n; i++)
    {
        scanf("%d %s" , &(G->vesx[i].num), &(G->vesx[i].info));
    }

    for(i = 0; i < G->n; i++)
    {
        for(j = 0; j < G->n; j++)
        {
            //邻接矩阵的对角线值为0
            if(j == i)
            {
                G->deges[i][j] = 0;
            }
            //其他全部初始化为无穷大“ ∞ ”
            else
            {
                G->deges[i][j] = LIMITLESS;
            }
        }
    }

    //记录每条边的权值
    printf("请输入 i , j , w 的值:\n");
    for(k = 0; k < G->e; k++)
    {
        scanf("%d %d %d" , &i , &j , &w);
        G->deges[i][j] = w;
    }
}

//输出图的邻接矩阵
void DispMGraph(MGraph *G)
{
    int i;
    int j;

    if(G == NULL)
    {
        return;
    }

    printf("顶点数:%d\n边数:%d\n" , G->n , G->e);
    printf("%d个顶点的信息:\n" , G->n);

    //输出顶点信息
    for(i = 0; i < G->n; i++)
    {
        printf("%5d %5d %s\n" , i , G->vesx[i].num , G->vesx[i].info);
    }

    printf("各顶点相连的情况:\n");
    printf("\t");

    for(j = 0; j < G->n; j++)
    {
        printf("[%d]\t" , j);
    }
    printf("\n");

    for(i = 0; i < G->n; i++)
    { 
        printf("[%d]\t" , i);
        for (j = 0; j < G->n; j++)
        {
            if(G->deges[i][j] == LIMITLESS)
            {
                printf("∞\t");
            }else
            {
                printf("%d\t" , G->deges[i][j]);
            }
        }
        printf("\n");
    }
}

int main(void)
{
    MGraph *g = NULL;
    g = (MGraph *)malloc(sizeof(MGraph));
    //创建图结构
    CreateMGraph(g);
    //输出图结构
    DispMGraph(g);
    printf("\n");
    return 0;
}



测试结果:
这里写图片描述

  这是一个有向图,从测试的结果来看,和我们期望的52篇中图5中的邻接矩阵中的是一样的。

猜你喜欢

转载自blog.csdn.net/qq_35733751/article/details/81083841