长沙自适应网站制作,少儿编程培训机构排名前十,广告公司业务员小刘与客户马经理,个人网站界面设计图片在图论中#xff0c;图的遍历一般有两种#xff0c;分别为DFS#xff08;深度优先遍历#xff09;、BFS#xff08;广度优先遍历#xff09;#xff0c;以下是这两种遍历方式的模板#xff1a;
DFS#xff08;深度优先搜索#xff09;
代码框架#xff1a;
void … 在图论中图的遍历一般有两种分别为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(vectorvectorchar grid, vectorvectorbool visited, int x, int y) {int m grid.size(),n grid[0].size();queuepairint, 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; // 只要加入队列立刻标记避免重复访问}}}
}