迷宫问题(BFS回溯)

                                                                          迷宫问题

題目鏈接 : http://acm.sdtbu.edu.cn/vjudge/contest/view.action?cid=2181#problem/J

Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

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 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

struct A
{
    int x,y,time;
    int per,my;
}w[5000];
int n=5,e=1;
int a[6][6],vis[6][6];
int cc[4][2]={0,1,0,-1,1,0,-1,0};
queue q;
int BFS()
{
    A now;
    now.x=0;
    now.y=0;
    now.time=0;
    now.per=-1;
    now.my=1;
    q.push(now);
    w[e++]=now;
    while(!q.empty())
    {
        now=q.front();
        q.pop();
        if(now.x==4&&now.y==4)
        {
            return now.my;
        }
        for(int i=0;i<4;i++)
        {
            A t;
            t.x=now.x+cc[i][0];
            t.y=now.y+cc[i][1];
            t.time=now.time+1;
            t.per=now.my;
            t.my=e;
            if(t.x>=0&&t.x=0&&t.y>a[i][j];
    int t=BFS();
    stack st;
    while(1)
    {
        st.push(w[t]);
        t=w[t].per;
        if(t==-1)
          break;
    }
    while(!st.empty())
    {
        cout<<"("<

 

你可能感兴趣的:(题目,图论,搜索)