图的深度优先遍历pta邻接矩阵
时间: 2023-09-06 20:10:17 浏览: 165
深度优先遍历(Depth First Search)是一种常见的图遍历算法,它通过尽可能深地搜索图的分支来遍历节点,当节点已经被访问过或者不存在时则回溯到之前的节点继续搜索。
对于一个图的邻接矩阵表示,深度优先遍历可以使用递归或者栈实现。下面是使用递归实现的代码:
```c++
const int MAXN = 100;
int graph[MAXN][MAXN]; // 图的邻接矩阵
bool visited[MAXN]; // 记录节点是否被访问过
void dfs(int u, int n) {
visited[u] = true; // 标记节点已被访问
printf("%d ", u); // 输出节点编号
for (int v = 0; v < n; v++) {
if (graph[u][v] && !visited[v]) { // 如果节点u和节点v有边,且节点v未被访问
dfs(v, n); // 递归访问节点v
}
}
}
int main() {
int n; // 节点数
scanf("%d", &n);
// 输入图的邻接矩阵
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
scanf("%d", &graph[i][j]);
}
}
// 从节点0开始深度优先遍历图
dfs(0, n);
return 0;
}
```
在上面的代码中,`dfs`函数表示从节点`u`开始深度优先遍历图,其中`n`表示图中节点的数量。`visited`数组记录节点是否被访问过。首先标记节点`u`为已访问,然后输出节点编号。接着遍历节点`u`的所有邻居节点`v`,如果节点`u`和节点`v`有边,且节点`v`未被访问,则递归访问节点`v`。最后,在`main`函数中从节点0开始深度优先遍历整个图。
需要注意的是,由于深度优先遍历会递归访问节点,因此在实现时需要注意避免死循环。
阅读全文