岛屿问题求最短路径(DFS)
用1代表陆地,用0代表陆地,你可以上下左右移动,给出下面这张地图求出最短路径
01011
00001
10100
10101
10000
#include <iostream>
#include <algorithm> using namespace std; int arr[][] = { , , -, , , , , - };
int start_x, start_y, end_x, end_y;
int MIN = , step = ;
int map[][] = {
, , , , ,
, , , , ,
, , , , ,
, , , , ,
, , , ,
}; void DFS(int x, int y, int step) {
if (x == end_x && y == end_y) {//函数结束条件:到达目标点
MIN = min(MIN, step);
return;
}
for (int i = ; i < ; ++i) {
int nx = arr[i][] + x;
int ny = arr[i][] + y;//移动位置
if (nx >= || nx < || ny >= || ny < || map[nx][ny] == ) {//如果移动到边界外或者碰到墙,则重新选择方向走
continue;
}
map[x][y] = ;//标记刚刚呆的地方为1,不需要回去了
DFS(nx, ny, step + );//以新的地方再次搜索
map[nx][ny] = ;//当回退时,说明找到了"终点",将改点设置可行,返回上个节点,找寻从上一个点有没有其他的路到终点
}
} int main()
{
cin >> start_x >> start_y >> end_x >> end_y;//输入起点和终点
DFS(start_x, start_y, );
cout << MIN;
system("PAUSE");
return ;
}
类似的下面这种也仅仅是上面的符号变换。
#S######.#
......#..#
.#.##.##.#
.#........
##.##.####
....#....#
.#######.#
....#.....
.####.###.
....#...G#
“#”代表海洋,“.”代表陆地,S代表起点,G代表终点。
这道的起点和终点坐标需要我们去查找,只要在输入时检测是否为起点或者终点,记录下坐标即可。
#include <iostream>
#include <algorithm>
#include <vector> #define MAX_SIZE 50 using namespace std; vector<vector<char> > map(MAX_SIZE, vector<char>(MAX_SIZE, '.'));
int arr[][]{ , , -, , , , , - };
int MIN = , begin_x, end_x, begin_y, end_y, a, b; void DFS(int x, int y, int step) {
if (x == end_x && y == end_y) {
MIN = min(MIN, step);
return;
} for (int i = ; i < ; i++) {
int nx = x + arr[i][];
int ny = y + arr[i][]; if (nx < || nx >= a || ny < || ny >= b || map[nx][ny] == '#') {
continue;
}
map[nx][ny] = '#';
DFS(nx, ny, step + );
map[nx][ny] = '.';
}
} int main()
{
int m, n;
cin >> m >> n;
a = m, b = n;
for (int i = ; i < m; ++i) {
for (int j = ; j < n; ++j) {
cin >> map[i][j];
if (map[i][j] == 'S') {
begin_x = i, begin_y = j;
}
if (map[i][j] == 'G') {
end_x = i, end_y = j;
}
}
} DFS(begin_x, begin_y, ); cout << MIN; return ;
}
上面的这两种方式,利用递归将所有到达目的地的路线都找了出来,取最小值。
岛屿问题求最短路径(DFS)的更多相关文章
- 杭电1142(最短路径+dfs)
A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- Spfa求最短路径
spfa求最短路径,其思想就是遍历每一个点,将没有入队的点入队,从这个点开始不断修改能够修改的最小路径,直到队空.不过这里一个点可以重复入队. 这个需要有存图的基础--------->前向星存图 ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径
自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...
- 求最短路径算法之SPAF算法。
关于求最短路径: 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了.最熟悉的无疑是Dijkstra(不能求又负权边的图),接着是Bellman-Ford,它们都可以求出由 ...
- Dijkstra算法求最短路径(java)(转)
原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...
- js迪杰斯特拉算法求最短路径
1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574 double[,] arr = new double ...
- hdu 2616 暴力使用 dfs求最短路径(剪枝有点依稀)
Kill the monster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- BZOJ4699 树上的最短路(最短路径+dfs序+线段树+堆+并查集)
首先一般化的将下水道和塌陷看成一个东西.注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道.这个第一个访问 ...
随机推荐
- IE11下使用fixed定位时鼠标滚动不平滑
很久不用IE了,近期做兼容性测试发现一个fixed定位的问题,当元素使用fixed定位时,其应该不随页面滚动,在chrome/firefox/edge下都很完美,元素完全不动,但是使用IE11时,如果 ...
- IT学习资源
介绍个人微信公众平台:Web开发笔记 含有免费学习资源,个人学习笔记,技术文章分享 资源篇 1.webapp书城开发 链接: https://pan.baidu.com/s/1pMHGKrh 密码: ...
- django使用auth模块进行身份认证
https://docs.djangoproject.com/zh-hans/2.0/topics/auth/default/#authentication-in-web-requests djang ...
- 为什么不应该重写service方法?
故事通常是这样开始的: 从前,有一个程序猿,他语重心长地对孙子说:“孩子,要是你以后写servlet,最好不要重写service方法啊” 孙子大为不解,程序猿又说:“听爷爷的,准没错,爷爷的爷爷就 ...
- luoguP2495 [SDOI2011]消耗战
https://www.luogu.org/problemnew/show/P2495 Dp 方程很显然 设 Dp[u] 表示--使 u 不与其子树中任意一个关键点联通的最小代价 设 w[a, b] ...
- 洛谷P4493 [HAOI2018]字串覆盖(后缀自动机+线段树+倍增)
题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能 ...
- win10在CMD操作MySQL时中文显示乱码
根据网上说明直接修改数据库各种的字符集没有效果,后来经过测试发现需要先更换至旧版CMD才行. 具体总流程如下: 1.在边框栏上右键,打开属性栏. 2.选择“使用旧版控制台” 3.重启CMD,并设置字符 ...
- 关于 SimpleMembership 中 CreateDate 的问题
使用 WebMatrix.WebData.WebSecurity.CreateUserAndAccount(model.UserName, model.Password, ...
- [POI2007]ZAP-Queries 数学
题目描述 Byteasar the Cryptographer works on breaking the code of BSA (Byteotian Security Agency). He ha ...
- 洛谷 P2286 [HNOI2004]宠物收养场
题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...