图的邻接矩阵表示
#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)