图的邻接矩阵表示

lixiangrong
2024-01-29 / 0 评论 / 57 阅读 / 正在检测是否收录...

图的邻接矩阵表示

#include <stdio.h>

// 8.3.1 图的邻接矩阵表示
#define INFINITY 10000 // 定义无穷大
#define V_MAX 100 // 顶点最大数
typedef char vertexType; // 顶点数据类型
typedef struct graph // 图的邻接矩阵表示
{
    int n, e; // 顶点和边总数
    vertexType vertex[V_MAX]; // 顶点集合
    int edge[V_MAX][V_MAX]; // 邻接矩阵
}graph;

// 1. 创建邻接矩阵表示的图
void create(graph *g, int c)
{
    int i,j,k,w;
    scanf("%d%d",&g->n,&g->e);
    for (i = 0; i < g->n; ++i)
        scanf("%1s",&g->vertex[i]);
    for (i = 0; i < g->n; ++i) // 初始化邻接矩阵
    {
        for (j = 0; j < g->n; ++j)
        {
            if(i == j) g->edge[i][j] = 0;
            else g->edge[i][j] = INFINITY;
        }
    }
    for (k = 0; k < g->e; ++k)
    {
        scanf("%d%d%d",&i,&j,&w);
        g->edge[i][j] = w;
        if(c == 0) g->edge[j][i] = w; // 无向图
    }
}

// 2. 输出邻接矩阵表示的图
void print(graph g)
{
    if(g.n > 0)
    {
        for (int i = 0; i < g.n; ++i)
        {
            for (int j = 0; j < g.n; ++j)
                printf("%d\t",g.edge[i][j]);
            printf("\n");
        }
    }
    printf("该图有%d个顶点,%d条边",g.n,g.e);
}

int main()
{
    graph g;
    printf("请依次输入图的定点数、边数,顶点信息和边信息\n");
    create(&g,0); // 0表示无向图,1表示有向图
    printf("该图的邻接矩阵表示如下:\n");
    print(g);
    return 0;
}
0

评论 (0)

取消