POJ 3984 迷宫问题(广搜)

【题目链接】
http://poj.org/problem?id=3984

题目意思

给个5*5的地图,1墙,0可以走,问你从左上到右下最少步数怎么走输出路径

解题思路

简单的广搜,每次只要控制左和下,设个前驱数组存路径就可以了。

代码部分


#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <string>
#include <map>
using namespace std;
#define LL long long
#define inf 0x3f3f3f3
const int N = 1e5+5;
struct node
{
    int x,y,step;
}s;
node pre[10][10];
int maps[10][10];
int vis[10][10];
int dir[2][2]={1,0,0,1};
void dfs (int x, int y)
{
    if (x==0 && y== 0)
    {
        printf("(%d, %d)\n",x,y);
        return;
    }
    node t = pre[x][y];
    dfs(t.x,t.y); 
    printf("(%d, %d)\n",x,y);
}
void bfs ()
{
    queue <node>q;
    q.push(s);
    vis[0][0] = 1;
    while (!q.empty())
    {
        node t,tt;
        t = q.front();
        q.pop();
        tt.step = t.step+1;
        for (int i = 0; i < 2; i++)
        {
            tt.x = t.x+dir[i][0];
            tt.y = t.y+dir[i][1];
            pre[tt.x][tt.y] = t;
            if (tt.x == 4 && tt.y ==4)
                return;
            if (tt.x < 5 && tt.y <5 && !vis[tt.x][tt.y] && !maps[tt.x][tt.y])
            {
                vis[tt.x][tt.y] = 1;
                q.push(tt);
            }
        }
    }
}
int main()
{
    memset(vis,0,sizeof (vis));
    for (int i =0; i < 5; i++)
        for (int j = 0; j < 5;j++)
            cin>>maps[i][j];
    s.x = 0;
    s.y = 0;
    s.step = 0;
    bfs();
    dfs(4,4);
    return 0;
}

    原文作者:迷宫问题
    原文地址: https://blog.csdn.net/pashuihou/article/details/79822060
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞