《啊哈!算法》第4章 万能的搜索
2014-06-22 15:44
169 查看
第5节 宝岛探险
利用广度优先搜索实现
其中可以不用开辟visit变量,直接用将本身的值改为-1,然后判断即可
注意输入数据时周围加了一层-1,作为边界
广度优先搜索
利用深度优先搜索实现,注意下面的方法是将搜索到的点着成-1的颜色
深度优先搜索
注意如果n和m比较大的话,建议用广度优先搜索,
由于深度优先搜索,一直按照深度优先下去,故最坏情况为n*m,
而广度优先搜索,的最坏情况是max(n,m)
关于求小岛的数量,只需要对每个点遍历一边,如果该点是陆地的话,进行深度优先搜索
水管工游戏
利用广度优先搜索实现
其中可以不用开辟visit变量,直接用将本身的值改为-1,然后判断即可
注意输入数据时周围加了一层-1,作为边界
广度优先搜索
利用深度优先搜索实现,注意下面的方法是将搜索到的点着成-1的颜色
深度优先搜索
注意如果n和m比较大的话,建议用广度优先搜索,
由于深度优先搜索,一直按照深度优先下去,故最坏情况为n*m,
而广度优先搜索,的最坏情况是max(n,m)
关于求小岛的数量,只需要对每个点遍历一边,如果该点是陆地的话,进行深度优先搜索
#include <iostream> #include <vector> #include <stack> #include <algorithm> #include <utility> using namespace std; typedef pair<int,int> Point; typedef vector<vector<int> > VVI; typedef vector<vector<bool> >VVB; stack<Point> res; int n,m; vector<vector<Point> > solutions; bool flag = false; void dfs(int x, int y, int direction,VVI& a, VVB& visit){ if(flag) return; if(x == n && y== m+1){ flag = true; while(!res.empty()){ Point p = res.top();res.pop(); cout<<"("<<p.first<<","<<p.second<<")->"; } cout<<endl; return; } if(visit[x][y]) return; visit[x][y] = true; res.push(Point(x,y)); if(a[x][y] == 5 || a[x][y] == 6){ switch(direction){ case 1:dfs(x,y+1,1,a,visit); case 2:dfs(x+1,y,2,a,visit); case 3:dfs(x,y-1,3,a,visit); case 4:dfs(x-1,y,4,a,visit); } } if(a[x][y]>=1 && a[x][y] <= 4){ switch(direction){ case 1:{dfs(x+1,y,2,a,visit);dfs(x-1,y,4,a,visit);} case 2:{dfs(x,y+1,1,a,visit);dfs(x,y-1,3,a,visit);} case 3:{dfs(x-1,y,4,a,visit);dfs(x+1,y,2,a,visit);} case 4:{dfs(x,y+1,1,a,visit);dfs(x,y-1,3,a,visit);} } } visit[x][y] = false; res.pop(); return; } int main(){ cin >> n >> m; vector<vector<int> > a(n+2,vector<int>(m+2,-1)); vector<vector<bool> > visit(n+2,vector<bool>(m+2,true)); for(int i = 1; i <= n ; ++ i){ for(int j = 1; j <= m ; ++ j){ cin >> a[i][j]; visit[i][j] = false; } } dfs(1,1,1,a,visit); if(!flag) cout<<"impossible"<<endl; }
水管工游戏
相关文章推荐
- 【C++】【啊哈!算法】第四章 万能的搜索
- 【万能搜索】万能DFS之全排列(一)——普通算法
- 蓝桥-算法-万能搜索
- 谷歌搜索修改算法:经过加密处理的网页权重将提升
- 图的基本算法——广度优先搜索和深度优先搜索
- 【算法——02】图的遍历——BFS广度优先搜索、DFS深度优先搜索
- 该深度优先搜索算法查找钥匙的程序之问题~~
- 深度优先搜索2-Sudoku(算法基础 第7周)
- 搜索DFS算法
- 万能的搜索3
- 推荐系统:技术、评估及高效算法 第4章
- 广度优先搜索-Shredding Company(算法基础 第8周)
- 【Python排序搜索基本算法】之Dijkstra最短路径算法(Dijkstra's Shortest-Path Algorithm)
- Google工程师详述Google的搜索结果排列算法
- 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开
- Dijkstra 算法,用于对有权图进行搜索,找出图中两点的最短距离
- 基本图算法(广度优先搜索和深度优先搜索)
- 人工智能 一种现代方法 第4章 超越经典搜索
- 算法铺子之二分搜索树
- 广度优先搜索迷宫路径算法的实现