迷宫最短路径 问题

/*
迷宫最短路径 问题
*/
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct Node{
  int x, y;
  Node(int x,int y) {
    this->x = x;
    this->y = y;
  }
};
const int N = 15;
int map[9][9]= {1,1,1,1,1,1,1,1,1,
1,0,0,1,0,0,1,0,1,
1,0,0,1,1,0,0,0,1,
1,0,1,0,1,1,0,1,1,
1,0,0,0,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,1,0,0,1,
1,1,0,1,0,0,0,0,1,
1,1,1,1,1,1,1,1,1};
int d[N][N], book[N][N];
int next[][2] = {{-1,0},{0,1},{1,0},{0,-1}};
int endx, endy;
int n, m;
void bfs(int x,int y) ;
int main() {
    int beginx, beginy;
    while (cin >> beginx >> beginy) {
      cin>> endx >> endy;
      memset(book,0,sizeof(book));
      memset(d,0,sizeof(d));
    n = 8, m = 8;
      bfs(beginx,beginy);
      cout << d[endx][endy] << endl;
  }
}
void bfs(int x,int y) {
  queue<Node> p;
  Node q(x,y);
  p.push(q);
  d[x][y] = 0;
  book[x][y] = 1;
  while (!p.empty()) {
    q = p.front();
    p.pop();
    if (q.x == endx && q.y == endy) return ;
    int v, u;
    for (int i = 0; i < 4; i++) {
      v = q.x + next[i][0];
      u = q.y + next[i][1];
      if (v >= 0 && v <= n && u >= 0 && u <= m && book[v][u] == 0 && map[v][u] == 0) {
        book[v][u] = 1;
        d[v][u] = d[q.x][q.y] + 1;
//        q = Node(v,u);
        p.push(Node(v,u));
      }
    }
  }
  return ;
}
时间: 2024-10-03 10:18:49

迷宫最短路径 问题的相关文章

迷宫最短路径

1226: 迷宫最短路径 时间限制: 1 Sec  内存限制: 128 MB 提交: 1  解决: 1 [提交][状态][讨论版]      [Edit]      [TestData] 题目描述 给定一个大小为N*M的迷宫.迷宫有通道和墙壁组成,每一步可以向上下左右是个方向移动.求起点到终点的最短路 M,N<=100. 输入 创建迷宫. 输出 输出最短路长度. 样例输入 10 10 #S######.# ......#..# .#.##.##.# .#........ ##.##.#### .

BFS求解迷宫最短路径

本文使用BFS广度优先搜索算法实现求解迷宫的最短路径(C++),使用到了队列先进先出的性质,依次搜索路径直到找到目标出口(如果迷宫能走通)求解到的路径即为该迷宫的最短路径,找到返回true,找不到返回false,本文使用vexmap一个map容器记录队列的搜索路径(记录队列路径的实现有点草率,可以再优化).</p><p> </p><pre class="cpp" name="code">#include<iost

回溯法找迷宫最短路径

有一个二维数组,0表示路,-1表示墙,求其中任意两点的最短路径 我们先看,怎么求一条路径:求两点路径是一个数据结构上的典型的迷宫问题,解决办法如下: 从一点开始出发,向四个方向查找(上,右,下,左),每走一步,把走过的点的值+1,防止重复行走,并把走过的点压入堆栈(表示路径),如果遇到墙.或者已走过的点则不能前进,如果前方已经无路可走,则返回,路径退栈,这样递归调用,直到找到终点为止. 如果我们调整查找的顺序,改为左.右.上.下,可能会得到更短的路径,但这种方法不能保证一定是最短路径. 经过网上

Sicily Maze(BFS计算迷宫最短路径)

      1000. Maze                       Time Limit: 1sec    Memory Limit:256MB Description Master Tang is kidnapped by a monster and put in a maze, and Mr. Sha wants to rescue him. The maze is an n*m matrix. There are two types rooms in the maze, 1 fo

迷宫最短路径-货郎担问题的解决思路

要解决的问题: 给定一个迷宫,此迷宫中有且仅有一个入口和出口,其中设有若干检查点,要求从入口开始,经过所有检查点后到达出口所需的最短路径.其中路径中允许多次经过入口或出口或某检查点,但路径的开始和结尾必须分别是入口和出口.更形象一点就是要把图中所有的宝藏找出来带出去的问题.    连设计算法+写算法实现的论文+编写代码和制作演示动画,花费了四天时间,还是小有收获的赶脚.算法的核心描述就是先假设已经有一个最优路径,然后插入一个新的检查点时,如何使插入导致的路径增量最小.这种先假设存在最优路径然后再

【贪心算法】迷宫最短路径

Description 为了测试某种药物对小白鼠方向感的影响,生物学家在实验室做了一个矩形迷宫,入口和出口都确定为唯一的,且分布在矩形的不同边上.现在让你算出小白鼠最短需要走多少步,才可以从入口走到出口. Input 共N+1行,第一行为N(N=0表示输入结束),以下N行N列0-1矩阵,1表示不能通过,0表示可以通过(左上角和右下角为0,即入口和出口),其中N<30. Output 只有一个数,为最少要走的格子数.0表示没有路径. Sample Input 5 0 1 1 1 1 0 0 1 1

迷宫最短路径问题

问题:给定一个大小为N×M的迷宫.迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.请注意,本题假定从起点一定可以移动到终点. 限制条件:N, M ≦100 示例输入: 10 10#S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#......####.###.....#...G# 示例输出: 22 思路: BFS广度优先搜索 DFS利用系统栈,不用自

cdoj1088-王之迷宫 (三维迷宫最短路径)【BFS】

http://acm.uestc.edu.cn/#/problem/show/1088 王之迷宫 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 王被困在了一个3维的迷宫中,他很想逃离这个迷宫回去当学霸,你能帮助他么? 由于王很仁慈,他悄悄地告诉你,本题读入迷宫的每一行时,要用scanf("%s"...) ...... Input 多组测试

【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

[题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因为广搜需要的就是队列,所以相比递归队列更耗内存? 当然DFS并不像上图所说,需要用栈,而是运用递归即可. BFS: 因为BFS是要一个接一个的遍历,所以用到了结构体,来保存坐标和当前所走步数 1.每走一步,通过定义的结构体,从队列中提取a(即上一步的坐标.步数(步数每次累加)) 2.在a的基础上进行