设计一个C语言程序,实现以下功能:创建无向图的存储结构(图的信息由用户输入),输出无向图的信息 深度优先遍历(DFS)无向图,并输出遍历序列 广度优先遍历(DFS)无向图,并输出遍历序列
时间: 2024-05-04 17:19:21 浏览: 97
以下是一个简单的示例程序,可以实现创建无向图的存储结构、输出无向图信息、深度优先遍历和广度优先遍历,并输出遍历序列。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTICES 20
// 定义邻接矩阵存储结构
typedef struct {
int n; // 图中顶点数
int edges[MAX_VERTICES][MAX_VERTICES]; // 邻接矩阵
} Graph;
// 初始化无向图
void initGraph(Graph *g) {
int i, j;
g->n = 0;
for (i = 0; i < MAX_VERTICES; i++) {
for (j = 0; j < MAX_VERTICES; j++) {
g->edges[i][j] = 0;
}
}
}
// 添加边
void addEdge(Graph *g, int u, int v) {
if (u >= g->n || v >= g->n) {
printf("Error: vertex index out of range\n");
return;
}
g->edges[u][v] = g->edges[v][u] = 1;
}
// 输出无向图信息
void printGraph(Graph *g) {
int i, j;
printf("Number of vertices: %d\n", g->n);
printf("Adjacency matrix:\n");
for (i = 0; i < g->n; i++) {
for (j = 0; j < g->n; j++) {
printf("%d ", g->edges[i][j]);
}
printf("\n");
}
}
// 深度优先遍历
void dfs(Graph *g, int v, int visited[]) {
int i;
visited[v] = 1; // 标记已访问
printf("%d ", v); // 输出遍历顺序
for (i = 0; i < g->n; i++) {
if (g->edges[v][i] && !visited[i]) {
dfs(g, i, visited);
}
}
}
// 广度优先遍历
void bfs(Graph *g, int v, int visited[]) {
int queue[MAX_VERTICES], front = 0, rear = 0;
int i, u;
visited[v] = 1; // 标记已访问
printf("%d ", v); // 输出遍历顺序
queue[rear++] = v; // 入队
while (front != rear) {
u = queue[front++]; // 出队
for (i = 0; i < g->n; i++) {
if (g->edges[u][i] && !visited[i]) {
visited[i] = 1; // 标记已访问
printf("%d ", i); // 输出遍历顺序
queue[rear++] = i; // 入队
}
}
}
}
int main() {
Graph g;
int visited[MAX_VERTICES] = {0};
int i, j, n, u, v;
// 获取图的顶点数
printf("Enter number of vertices: ");
scanf("%d", &n);
if (n > MAX_VERTICES) {
printf("Error: too many vertices\n");
return 1;
}
// 初始化无向图
initGraph(&g);
g.n = n;
// 添加边
printf("Enter edges (u v):\n");
while (scanf("%d %d", &u, &v) == 2) {
addEdge(&g, u, v);
}
// 输出无向图信息
printGraph(&g);
// 深度优先遍历
printf("DFS traversal: ");
for (i = 0; i < g.n; i++) {
if (!visited[i]) {
dfs(&g, i, visited);
}
}
printf("\n");
// 广度优先遍历
for (i = 0; i < g.n; i++) {
visited[i] = 0;
}
printf("BFS traversal: ");
for (i = 0; i < g.n; i++) {
if (!visited[i]) {
bfs(&g, i, visited);
}
}
printf("\n");
return 0;
}
```
阅读全文
相关推荐
















