用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)的更多相关文章

  1. 杭电1142(最短路径+dfs)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  2. Spfa求最短路径

    spfa求最短路径,其思想就是遍历每一个点,将没有入队的点入队,从这个点开始不断修改能够修改的最小路径,直到队空.不过这里一个点可以重复入队. 这个需要有存图的基础--------->前向星存图 ...

  3. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  4. 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径

    自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...

  5. 求最短路径算法之SPAF算法。

    关于求最短路径: 求最短路径的算法有许多种,除了排序外,恐怕是OI界中解决同一类问题算法最多的了.最熟悉的无疑是Dijkstra(不能求又负权边的图),接着是Bellman-Ford,它们都可以求出由 ...

  6. Dijkstra算法求最短路径(java)(转)

    原文链接:Dijkstra算法求最短路径(java) 任务描述:在一个无向图中,获取起始节点到所有其他节点的最短路径描述 Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到 ...

  7. js迪杰斯特拉算法求最短路径

    1.后台生成矩阵 名词解释和下图参考:https://blog.csdn.net/csdnxcn/article/details/80057574 double[,] arr = new double ...

  8. hdu 2616 暴力使用 dfs求最短路径(剪枝有点依稀)

    Kill the monster Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. BZOJ4699 树上的最短路(最短路径+dfs序+线段树+堆+并查集)

    首先一般化的将下水道和塌陷看成一个东西.注意到在从源点出发的所有需要使用某条下水道的最短路径中,该下水道只会被使用一次,该下水道第一个被访问的点相同,且只会在第一个访问的点使用该下水道.这个第一个访问 ...

随机推荐

  1. 对于网站,APP开发流程的理解

    • 明确产品目标用户,目标市场 • 明确将要开发的产品面世后是要解决什么样的问题 • 梳理产品有哪些功能点,功能点如何按照模块划分 • 站在用户角度思考用户怎样使用这款产品,以故事的情景讲述用户如何使 ...

  2. ComicEnhancerPro 系列教程十九:用JpegQuality看JPG文件的压缩参数

    作者:马健邮箱:stronghorse_mj@hotmail.com 主页:http://www.comicer.com/stronghorse/ 发布:2017.07.23 教程十九:用JpegQu ...

  3. Windows 下 MongoDb 简单配置

    以管理员的启动cmd        进入安装目录下                      输入:  mongod  --auth --port 3406  --dbpath=库地址  --logp ...

  4. openvpn的搭建与应用

    一.VPN概述: VPN(Virtual Private NetWork,虚拟专用网络)架设在公共共享的基础设施互联网上,在非信任的网络上建立私有的安全的连接,把分布在不同地域的办公场所.用户或者商业 ...

  5. svn: Can’t convert string from ‘UTF-8’ to native encoding: 解决办法

    主要原因是linux的编码发生改动 只需该为 en_US.UFT-8即可 [具体操作可以查看]https://www.cnblogs.com/sz-xioabai/p/10523423.html

  6. selenium滑动验证码操作

    1.首先要找到你要滑动的地方 2.调动鼠标事件按住不动 3.调整坐标即可 我这里是为了调试加了很多的sleep,print(hander)是为了看是否定位到了元素 4.效果如下图,但是我这里的验证文字 ...

  7. 三种timer控件的简单实例

    .system.windows.forms .system.threading.timer .system.timers.timer using System; using System.Collec ...

  8. Tensorflow可视化MNIST手写数字训练

    简述] 我们在学习编程语言时,往往第一个程序就是打印“Hello World”,那么对于人工智能学习系统平台来说,他的“Hello World”小程序就是MNIST手写数字训练了.MNIST是一个手写 ...

  9. 在Windows上搭建Git Server (2)

      第一步:下载Java,下载地址:http://www.java.com/zh_CN/ 第二步:安装Java.安装步骤不再详述. 第三步:配置Java环境变量. 右键”计算机” => ”属性” ...

  10. 解决CentOS查询不到ip

    问题:登陆操作系统,输入ip addr 也可以输入ifconfig查看ip,发现ens33目录中没有inet属性 解答:查看ens33的网卡配置: vi /etc/sysconfig/network- ...