用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. 学习如何用VS2010创建ocx控件

    1参考文章 (1)这一篇将使用vc创建ocx控件:http://blog.csdn.net/jiadelin/article/details/2917225 (2)这一篇文章有关vs2010创建act ...

  2. MSSQL 静态值查询

    有些时候可能会需要查询一些静态值 ), (),()) AS tabName ( c1 ) 演变1.多列 ,), (,),(,)) AS tabName ( c1,c2 ) 演变2.聚合 ), (),( ...

  3. Django不能使用ip方式访问的解决办法

    问题: 启动服务后,使用http://127.0.0.1:8000/showcase/或者http://localhost:8000/showcase/都能访问, 但是使用http://192.168 ...

  4. 以太坊系列之十八: 百行go代码构建p2p聊天室

    百行go代码构建p2p聊天室 百行go代码构建p2p聊天室 1. 上手使用 2. whisper 原理 3. 源码解读 3.1 参数说明 3.1 连接主节点 3.2 我的标识 3.2 配置我的节点 3 ...

  5. MongoDB插入时间不正确的问题

    关于mongodb插入时间不正确的问题 今天在给mongodb插入日期格式的数据时发现,日期时间相差8个小时,原来存储在mongodb中的时间是标准时间UTC +0:00,而中国的时区是+8.00 . ...

  6. vs2015+opencv3.3.1 实现 c++ 直方图均衡化

    //直方图均衡化 https://github.com/scutlzk #include <opencv2\highgui\highgui.hpp> #include <iostre ...

  7. PHP+JQuery实现ajax跨域

    jQuery实现ajax跨域 1.dataType:'jsonp'2.type: 'get'3.把要传的参数以url方式传出去  url:'http://gameapi.feiliu.com/lqzg ...

  8. 《Servlet和jsp学习指南》 笔记1

    chapter 1 Servlet 4个java 包: 对于每一个http请求,Servlet请求都会创建一个ServletRequest实例,并将它传给Servlet的service方法.Servl ...

  9. 趣图:向客户介绍的产品VS实际开发的产品

      趣图:客户需求 vs 最终产品 趣图:你永远想不到用户怎么使用你的产品

  10. 在win7系统上搭建django+oracle 11g时,注意事项

    在win7系统上搭建django+oracle 11g时,注意事项[示例用的是python 2.7]: 重要:python.oracle.oracle client这三个的OS bit 一定一定要相同 ...