请用c语言写一个代码,用邻接矩阵存储有向图,从键盘输入多对节点,类似于(A,B),节点为字符类型,输出深度和广度优先遍历的结果
时间: 2025-01-03 21:44:18 浏览: 10
在C语言中,我们可以使用二维数组作为邻接矩阵来存储有向图。首先,我们需要定义一个函数来读取输入并填充矩阵,然后分别编写深度优先搜索(DFS)和广度优先搜索(BFS)的递归/迭代版本。以下是简化的示例代码:
```c
#include <stdio.h>
#define V 26 // 字母表大小
// 定义邻接矩阵
int graph[V][V] = {0}; // 初始化全零
// 添加边到图
void addEdge(char u, char v) {
graph[u - 'A'][v - 'A'] = 1; // 转换为整数下标
}
// 深度优先搜索
void DFS(char start, int visited[]) {
visited[start - 'A'] = 1;
printf("%c -> ", start);
for (int i = 0; i < V; ++i) {
if (graph[start - 'A'][i] && !visited[i]) {
DFS((char)(i + 'A'), visited);
}
}
}
// 广度优先搜索
void BFS(char start) {
int visited[V] = {0};
queue<char> q;
visited[start - 'A'] = 1;
q.push(start);
while (!q.empty()) {
char top = q.front();
printf("%c -> ", top);
for (int i = 0; i < V; ++i) {
if (graph[top - 'A'][i] && !visited[i]) {
printf("%c", (char)(i + 'A'));
visited[i] = 1;
q.push((char)(i + 'A'));
}
}
q.pop();
}
}
// 主函数
int main() {
while (true) {
char u, v;
printf("请输入一对节点,格式为(A,B),输入结束请输入Q: ");
scanf("%c,%c", &u, &v);
if (u == 'Q') break; // 结束条件:用户输入Q
addEdge(u, v); // 添加边
printf("\nDepth First Search: ");
DFS(u, NULL); // 输出DFS结果
printf("\nBreadth First Search: ");
BFS(u); // 输出BFS结果
}
return 0;
}
```
这个程序首先从用户那里获取节点对,添加边到邻接矩阵,然后分别执行深度优先和广度优先遍历,并打印出相应的路径。注意,这个例子假设输入的字母都是小写字母。
阅读全文