问题描述
使用邻接矩阵存储下图所示无向图
** **
解题思路
创建一个邻接矩阵
程序实现
#include <stdlib.h>
#include <stdio.h>
#define MAXVEX 10
/* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Status;
/* 顶点类型应由用户定义 */
typedef char VertexType;
/* 边上的权值类型应由用户定义 */
typedef int EdgeType;
typedef struct {
VertexType vex[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
int numNodes, numEdges;
} MyGraph, *GraphPlus;
void CreateMyGraph(GraphPlus *plus);
int main(void) {
int i, j;
GraphPlus plus;
CreateMyGraph(&plus);
for (i = 0; i < plus->numNodes; i++) {
for (j = 0; j < plus->numNodes; j++) {
printf("%d\t", plus->arc[i][j]);
}
printf("\n");
}
}
void CreateMyGraph(GraphPlus *plus) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d,%d", &i, &j);
*plus = (GraphPlus)malloc(sizeof(MyGraph));
getchar();
(*plus)->numNodes = i;
(*plus)->numEdges = j;
// 读入顶点数
for (i = 0; i < (*plus)->numNodes; i++) {
scanf("%c", &(*plus)->vex[i]);
}
// 初始化边数组
for (i = 0; i < (*plus)->numNodes; i++) {
for (j = 0; j < (*plus)->numNodes; j++) {
(*plus)->arc[i][j]=0;
}
}
// 读入numEdges条边,建立邻接矩阵
for(k = 0; k < (*plus)->numEdges; k++) {
printf("输入边(vi,vj)上的下标i,下标j:\n");
scanf("%d,%d", &i, &j);
(*plus)->arc[i][j] = 1;
// 因为是无向图,矩阵对称
(*plus)->arc[j][i] = (*plus)->arc[i][j];
}
}