用简单的c语言构造图的邻接矩阵存储结构,实现有向图或无向图的创建,并输出深度优先遍 历序列和广度优先遍历序列。
时间: 2025-01-30 17:13:00 浏览: 74
在C语言中,我们可以使用二维数组或者动态内存分配来构建邻接矩阵来表示有向图或无向图。以下是基本步骤:
1. **邻接矩阵存储**:
- 对于无向图,邻接矩阵是对称的,即`adj[i][j] = adj[j][i]`。
- 对于有向图,邻接矩阵非对称,只存储从源节点到目标节点的关系。
```c
// 示例用int类型的邻接矩阵
typedef int GraphMatrix[VertexCount][VertexCount];
GraphMatrix graph;
```
2. **创建有向图或无向图**:
- 初始化邻接矩阵,如添加边`graph[from][to] = 1`表示连接`from`到`to`。
3. **深度优先遍历(DFS)和广度优先遍历(BFS)**:
- DFS: 使用栈辅助实现,从某个起点开始,访问当前节点,然后递归地访问未访问过的相邻节点。
```c
void dfs(int start, GraphMatrix matrix) {
// ...其他操作...
for (int i = 0; i < VertexCount; ++i)
if (matrix[start][i]) {
printf("%d ", i); // 输出节点
dfs(i, matrix);
}
}
```
- BFS: 使用队列辅助实现,每次从未访问过的节点开始,按层顺序访问。
```c
void bfs(int start, GraphMatrix matrix) {
Queue queue;
// ...其他初始化操作...
queue.enqueue(start);
while (!queue.isEmpty()) {
int current = queue.dequeue();
printf("%d ", current); // 输出节点
for (int i = 0; i < VertexCount; ++i)
if (matrix[current][i])
queue.enqueue(i);
}
}
```
4. **输出遍历序列**:
- 调用相应函数,比如 `dfs(start)` 或 `bfs(start)`,并打印出路径节点。
注意:`VertexCount`代表顶点的数量,你需要自己编写队列和堆栈的实现,这里仅提供思路。
阅读全文
相关推荐


















