当前位置:首页 > 编程笔记 > 正文
已解决

图论---图的遍历

来自网友在路上 170870提问 提问时间:2023-10-09 10:24:49阅读次数: 70

最佳答案 问答题库708位专家为你答疑解惑

        在图论中,图的遍历一般有两种,分别为DFS(深度优先遍历)、BFS(广度优先遍历),以下是这两种遍历方式的模板:

DFS(深度优先搜索)

代码框架:

void dfs(参数) {if (终止条件) {存放结果;return;}
​for (选择:本节点所连接的其他节点) {处理节点;dfs(图,选择的节点); 回溯,撤销处理结果}
}
void main_function(参数){for(遍历所有节点){if(节点未遍历){dfs(该节点)}}
}

BFS(广度优先搜索)

代码框架:

int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 表示四个方向
void bfs(vector<vector<char>>& grid, vector<vector<bool>>& visited, int x, int y) {int m = grid.size(),n = grid[0].size();queue<pair<int, int>> que; // 定义队列que.push({x, y}); // 起始节点加入队列visited[x][y] = true; // 只要加入队列,立刻标记为访问过的节点while(!que.empty()) { // 开始遍历队列里的元素auto cur = que.front(); // 从队列取元素que.pop(); int x = cur.first;int y = cur.second; // 当前节点坐标for (int i = 0; i < 4; i++) { // 开始想当前节点的四个方向左右上下去遍历int tx = x + dir[i][0];int ty = y + dir[i][1]; // 获取周边四个方向的坐标if (tx >= 0 && tx < m && ty >= 0 && ty < n && !visited[tx][ty]) { // 如果节点没被访问过que.push({tx, ty});  // 队列添加该节点为下一轮要遍历的节点visited[tx][ty] = true; // 只要加入队列立刻标记,避免重复访问}}}
}
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"图论---图的遍历":http://eshow365.cn/6-17745-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!