#include <stdio.h>
#include <stdlib.h>
#define N 20
#define TRUE 1
#define FALSE 0
//访问标志数组
int visited[N];
//采用数组定义的队列,用于广度搜索
typedef struct {
int data[N];
int front, rear;
} SqQueue;
//图的邻接矩阵表示
typedef struct {
int vexnum, arcnum;
char vexs[N];
int arcs[N][N];
} MGraph;
void createGraph(MGraph *g);
void dfs(int i, MGraph *g);
void tdfs(MGraph *g, int v0);
void bfs(int k, MGraph *g);
void tbfs(MGraph *g, int v0);
void init_visit();
//读入数据,创建无向图的邻接矩阵
void createGraph(MGraph *g) {
char s;
int i = 0, v1, v2;
g->arcnum = 0;
g->vexnum = 0;
s = getchar();
while (s != '#') {
g->vexs[i] = s;
g->vexnum++;
s = getchar();
i++;
}
getchar();
for (int a = 0; a < i; a++)
for (int b = 0; b < i; b++)
g->arcs[a][b] = 0;
scanf("%d,%d", &v1, &v2);
while (v1 != -1 && v2 != -1) {
g->arcs[v1][v2] = 1;
g->arcs[v2][v1] = 1;
scanf("%d,%d", &v1, &v2);
g->arcnum++;
}
}
//深度优先搜索-从顶点i出发深度搜索
void dfs(int i, MGraph *g) {
int j;
printf("%c", g->vexs[i]);
visited[i] = 1;
for (j = 0; j < g->vexnum; j++) {
if (g->arcs[i][j] == 1 && !visited[j])
dfs(j, g);
}
}
//深度优先搜索-全图搜索
void tdfs(MGraph *g, int v0) {
int i;
for (i = 0; i < g->vexnum; i++)
if (visited[i] != TRUE)
dfs(v0, g);
}
//广度优先搜索-从顶点k广度搜索
void bfs(int k, MGraph *g) {
int i, j;
SqQueue qlist, *q;
q = &qlist;
q->rear = 0;
q->front = 0;
printf("%c", g->vexs[k]);
visited[k] = TRUE;
q->data[q->rear] = k;
q->rear = (q->rear + 1) % N;
while (q->rear != q->front) {
i = q->data[q->front];
q->front = (q->front + 1) % N;
for (j = 0; j < g->vexnum; j++)
if ((g->arcs[i][j] == 1) && (!visited[j])) {
printf("%c", g->vexs[j]);
visited[j] = TRUE;
q->data[q->rear] = j;
q->rear = (q->rear + 1) % N;
}
}
}
//广度优先搜素-全图搜索
void tbfs(MGraph *g, int v0) {
int i;
for (i = 0; i < g->vexnum; i++)
if (visited[i] != TRUE)
bfs(v0, g);
}
//初始化访问标志数组
void init_visit() {
int i;
for (i = 0; i < N; i++)
visited[i] = FALSE;
}
int main() {
MGraph g;
int i, j, v0;
createGraph(&g);
scanf("%d", &v0);
printf("graph:\n");
for (i = 0; i < g.vexnum; i++) {
for (j = 0; j < g.vexnum; j++)
printf("%d ", g.arcs[i][j]);
printf("\n");
}
printf("dfs:");
init_visit();
tdfs(&g, v0);
printf("bfs:");
init_visit();
tbfs(&g, v0);
return 0;
}
图的邻接矩阵
原创
©著作权归作者所有:来自51CTO博客作者wx641ed5d0bdd07的原创作品,请联系作者获取转载授权,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
OSPF的邻居关系和邻接关系
ospf邻居与邻接
OSPF 多址 邻接关系 -
图的邻接矩阵算法
无向图的邻接矩阵是关于左上右下对角线对称的,有向图不一定对称先得理解矩阵描述的图,或者明白图的矩阵描述概念。图的邻接矩阵
算法 数据结构 邻接矩阵 i++ 无向图 -
求简单图的邻接矩阵python 图的邻接矩阵代码
文章目录一、定义二、结构三、常用操作结语附录 一、定义 图的邻接矩阵是一种采用邻接矩阵数组表示顶点之间相邻关系的存储结构。设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 下面给出一个例子: &nbs
求简单图的邻接矩阵python 数据结构 邻接矩阵 初始化 无向图