poj 3984 迷宫问题(BFS+输出路径)

简介: poj 3984 迷宫问题(BFS+输出路径)



迷宫问题

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 11323   Accepted: 6776

Description

定义一个二维数组:

int maze[5][5] = {


0, 1, 0, 0, 0,


0, 1, 0, 1, 0,


0, 0, 0, 0, 0,


0, 1, 1, 1, 0,


0, 0, 0, 1, 0,


};


它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。

Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。

Output

左上角到右下角的最短路径,格式如样例所示。

Sample Input

0 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

Sample Output

(0, 0)

(1, 0)

(2, 0)

(2, 1)

(2, 2)

(2, 3)

(2, 4)

(3, 4)

(4, 4)

Source


题目分析:

此题的移动方向已经很明确要么下要么右







<span style="font-size:24px;">#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
#include<iostream>
using namespace std;
int mark[7][7],map[7][7];
struct node
{
    int a;
    int b;
};
stack<node> q;
void bfs(int x,int y)
{
    
    if(!mark[x][y])
    {
        node arr;
        arr.a=x;
        arr.b=y;
        mark[x][y]=1;
        q.push(arr);
    }
    if(x==5&&y==5)  return ;
    if(!mark[x+1][y]&&!map[x+1][y]) bfs(x+1,y);
    else if(!mark[x][y+1]&&!map[x][y+1]) bfs(x,y+1);
    else 
    {
        node arr;
        q.pop();
        arr=q.top();
        bfs(arr.a,arr.b);
    }
}
int main()
{
    for(int i=1;i<=5;i++)
        for(int j=1;j<=5;j++)
            //cin>>map[i][j];
            scanf("%d",&map[i][j]);
    memset(mark,0,sizeof(mark));
    for(int i=0;i<7;i++)
    {
        map[0][i]=1;
        map[i][0]=1;
        map[i][6]=1;
        map[6][i]=1;    
    }
    bfs(1,1);
    vector<node> v;
    while(!q.empty())
    {
        v.push_back(q.top());
        q.pop();
    }  
    for(int i=v.size()-1;i>=0;i--)
        printf("(%d, %d)\n",v[i].a-1,v[i].b-1);
 return 0;   
}</span>






目录
相关文章
|
缓存 NoSQL Java
SpringBoot实现缓存预热的几种常用方案
SpringBoot实现缓存预热的几种常用方案
|
存储 JSON 数据格式
Elasticsearch 8.X 可以按照数组下标取数据吗?
Elasticsearch 8.X 可以按照数组下标取数据吗?
|
Linux Windows Ubuntu
windows系统下FileZilla客户端 尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。 解决方案
windows系统下使用FileZilla连接linux(虚拟机系统)总是报错:尝试连接“ECONNREFUSED - 连接被服务器拒绝”失败。 个人使用的是最新版FileZilla:FileZilla-3.31.0。
11032 0
|
10月前
|
机器学习/深度学习 监控 安全
《智能安全帽检测:科技赋能安全管理的深度解析》
智能安全帽检测算法服务利用深度学习技术,实现实时、高精度的安全帽佩戴检测,显著提升建筑施工、工业生产等高风险行业的安全管理效率,减少安全事故。该服务通过便捷的设备接入、实时监测与报警、数据分析等功能,为企业提供全面的安全管理解决方案。
|
11月前
|
分布式计算 资源调度 数据可视化
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
156 1
|
11月前
|
算法
串ababaaababaa的next和串ababaabab的nextval
本文介绍了计算字符串的next数组和nextval数组的方法,通过分析两个具体的例子来展示如何计算这些数组,这些数组通常用于KMP算法中。
559 0
串ababaaababaa的next和串ababaabab的nextval
|
JavaScript 索引 前端开发
9.【TypeScript 教程】接口(Interface)
9.【TypeScript 教程】接口(Interface)
169 4
|
分布式计算 Java Hadoop
Spark环境搭建和使用方法
Spark环境搭建和使用方法
1291 1
|
存储 算法 编译器
【C++初阶】STL详解(三)vector的介绍与使用
【C++初阶】STL详解(三)vector的介绍与使用
138 0
|
存储
ROS学习-记录和回放数据
ROS学习-记录和回放数据
586 0
ROS学习-记录和回放数据