POJ3984(迷宫问题)

迷宫问题

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 15154   Accepted: 9030

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)注意打印路径。
#include <iostream>
#include <string.h>
using namespace std;
const int MAXN=1000005;
struct Node{
    int y,x,pre;
    Node(){}
    Node(int cy,int cx,int cpre)
    {
        y=cy;
        x=cx;
        pre=cpre;
    }
}que[MAXN];
int front,rear;
int mz[5][5];
int vis[5][5];
int dy[4]={0,1,0,-1};
int dx[4]={1,0,-1,0};
void print(int id)
{
    Node now=que[id];
    if(now.pre==-1)
    {
        cout<<"("<<now.y<<", "<<now.x<<")"<<endl;
        return ;
    }
    print(now.pre);
    cout<<"("<<now.y<<", "<<now.x<<")"<<endl;
}
void bfs()
{
    memset(vis,0,sizeof(vis));
    front=rear=0;
    que[rear++]=Node(0,0,-1);
    vis[0][0]=1;
    while(front!=rear)
    {
        Node now=que[front++];
        if(now.y==4&&now.x==4)
        {
            print(front-1);
            return ;
        }
        for(int i=0;i<4;i++)
        {
            int ny=now.y+dy[i];
            int nx=now.x+dx[i];
            if(0<=ny&&ny<5&&0<=nx&&nx<5&&!vis[ny][nx]&&mz[ny][nx]==0)
            {
                que[rear++]=Node(ny,nx,front-1);
                vis[ny][nx]=1;
            }
        }
    }

}
int main()
{
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            cin>>mz[i][j];
    bfs();
    return 0;
}
时间: 2024-11-08 19:13:50

POJ3984(迷宫问题)的相关文章

POJ3984 迷宫问题【水BFS】

#include <cstdio> #include <cmath> #include <iostream> #include <algorithm> #include <cstdlib> #include <cstring> #include <map> #include <vector> using namespace std; map<string,int>mymap; map<stri

搜索问题——POJ3984迷宫问题

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 左上角到右下角的最短路径,格式如样例所示. Sa

POJ3984 迷宫问题【BFS】

题目链接: http://poj.org/problem?id=3984 题目大意: 用一个5*5的二维数组表示迷宫,输出左上角到右下角的最短路径. 思路: 用BFS求最短路径.用pre[]来记录每个状态之前的状态,然后递归输出路径. AC代码: #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int Map[6][6

poj3984迷宫问题(DFS广搜)

迷宫问题 Time Limit: 1000MSMemory Limit: 65536K 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的二维数组,表示一个

POJ-3984 迷宫问题(BFS找最短路径并保存)

问题: 定义一个二维数组:  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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 输入: 一个5 × 5的二维数组,表示一个迷宫.数据保证有唯一解. 输出: 左上角到右下角的最短路径,格式如样例所示. //#include <bi

poj3984 迷宫问题(简单的输出路径的bfs)

题目链接 http://poj.org/problem?id=3984 中文题题意不解释了 反正就是简单的结构体套结构体存一下路径就行了 #include <iostream> #include <cstring> #include <deque> #include <queue> using namespace std; int map[6][6]; struct ss { int x , y; }; struct TnT { deque<ss>

《程序设计技术》课程辅助学习资料

本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定一个坚实的基础. 自己编写程序也是学习编程必不可少的一个环节.自己编写是否正确可以通过OJ系统来验证.选做OJ的程序设计题方便于评价自己所写的程序是否正确.想要提高编写程序的能力并且达到更高的水平,从各个OJ中选做一些编程题是十分必要的. 文中提供了CCF-CSP认证考试历年 试题的第1题的题解.这些题解中都

北大ACM暑期培训课程目录(二)

本文出自:http://blog.csdn.net/svitter 原来的一篇可能是因为字数太长,一编辑就出问题,无奈,只好暂时写一篇新的. 今天学习的内容是搜索. 一.wide search 1.poj3307 cow 深度搜索还要用栈. 广度搜速度更快. 按照层次的顺序访问节点. 走n步可以到达的点,n-1不可以到达.绝对是最优解. 可以联系图来想--周围区域扩展. re记住已经走过的点(如果转换成树呢?) 利用队列来存点. 广搜的空间大,深搜可以用一个栈来维护.(相对于广搜空间少的多) o

迷宫问题---poj3984(bfs,输出路径问题)

题目链接 主要就是输出路径问题: pre[x][y]表示到达(x,y)是由点(pre[x][y].x,  pre[x][y].y)而来: #include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<algorithm> using namespace std; #define N 220 #define INF 0xfffffff int dir