代码实现
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define MaxVertexNum 100
typedef char VertexType;
typedef int EdgeType;
typedef struct {
VertexType Vertex[MaxVertexNum];
EdgeType Edge[MaxVertexNum][MaxVertexNum];
int vexnum, arcnum;
} MGraph;
void FindVertex(MGraph *G, VertexType x, VertexType y, int *index_x, int *index_y);
void InitGraph(MGraph *G) {
G->vexnum = 0;
G->arcnum = 0;
}
bool InsertVertex(MGraph *G, VertexType vertex) {
if (G->vexnum >= MaxVertexNum)
return false;
G->Vertex[G->vexnum] = vertex;
G->vexnum++;
return true;
}
void FindVertex(MGraph *G, VertexType x, VertexType y, int *index_x, int *index_y) {
(*index_x) = -1;
(*index_y) = -1;
for (int i = 0; i < (*G).vexnum; i++) {
if ((*G).Vertex[i] == x)
(*index_x) = i;
else if ((*G).Vertex[i] == y)
(*index_y) = i;
if ((*index_x) != -1 && (*index_y) != -1)
break;
}
}
bool Adjacent(MGraph G, VertexType x, VertexType y) {
int index_x;
int index_y;
FindVertex(&G, x, y, &index_x, &index_y);
if (index_x == -1 || index_y == -1)
return false;
return G.Edge[index_x][index_y] == 1;
}
bool AddEdgeU(MGraph *G, VertexType x, VertexType y) {
int index_x;
int index_y;
FindVertex(G, x, y, &index_x, &index_y);
if (index_x == -1 || index_y == -1)
return false;
G->Edge[index_x][index_y] = 1;
G->Edge[index_y][index_x] = 1;
return true;
}
bool AddEdgeD(MGraph *G, VertexType x, VertexType y) {
int index_x;
int index_y;
FindVertex(G, x, y, &index_x, &index_y);
if (index_x == -1 || index_y == -1)
return false;
G->Edge[index_x][index_y] = 1;
return true;
}
bool PrintGraph(MGraph G) {
printf("\t");
for(int i = 0;i<G.vexnum;i++)
printf("%c\t",G.Vertex[i]);
printf("\n");
for (int i = 0; i < G.vexnum; i++) {
printf("%c\t",G.Vertex[i]);
for (int j = 0; j < G.vexnum; j++)
printf("%d\t", G.Edge[i][j]);
printf("\n");
}
}
int main() {
MGraph G;
InitGraph(&G);
InsertVertex(&G, 'A');
InsertVertex(&G, 'B');
InsertVertex(&G, 'C');
InsertVertex(&G, 'D');
InsertVertex(&G, 'E');
AddEdgeU(&G, 'A', 'B');
AddEdgeU(&G, 'A', 'C');
AddEdgeU(&G, 'B', 'D');
AddEdgeU(&G, 'C', 'D');
AddEdgeU(&G, 'C', 'E');
AddEdgeU(&G, 'D', 'E');
PrintGraph(G);
if(!Adjacent(G,'A','B'))
printf("不存在A-B边!\n");
else{
printf("存在A-B边!\n");
}
return 0;
}