POJ9384 迷宫问题(基础BFS)

本文出自:http://blog.csdn.net/svitter

题目:让你从(0, 0)走到(4,4),并且输出路径。输入数据:二位数组的迷宫;输出数据:路径;

题解:简单的BFS

注意:

1.去重;

2.墙不能走;

3.记录前一个节点

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>

using namespace std;

int maze[6][6];
bool visit[5][5];

struct node
{
    node *pre;
    int i;
    int j;
    node(){}
    node(int a, int b, node*c):i(a), j(b), pre(c){}
};

//1.去重
//2.是否墙壁
//
inline bool judge(int i, int j, int temp)
{
    if(temp < 0 || temp > 4)
        return false;

    //i, j 可以通行,并且没有访问过
    if(maze[i][j] != 1 && !visit[i][j])
        return true;

    return false;

}

void output(){}

int main()
{
    int i, j;
    for(i = 0; i < 5; i++)
        for(j = 0; j < 5; j++)
            scanf("%d", &maze[i][j]);

    node queue[1000];
    memset(visit, 0, sizeof(visit));

    int front , rear;
    front = rear = -1;
    node cur;
    int temp;
    queue[++rear] = node(4, 4, NULL);

    while(front != rear)
    {
        cur = queue[++front];
        i = cur.i;
        j = cur.j;
        if(i == 0 && j == 0)
            break;

        temp = cur.i+1;
        if(judge(temp, j, temp))
        {
            queue[++rear] = node(temp, j, &queue[front]);
            visit[temp][j] = 1;
        }

        temp = cur.j+1;
        if(judge(i, temp, temp))
        {
            queue[++rear] = node(i, temp, &queue[front]);
            visit[i][temp] = 1;
        }

        temp = cur.i-1;
        if(judge(temp, j, temp))
        {
            queue[++rear] = node(temp, j, &queue[front]);
            visit[temp][j] = 1;
        }

        temp = cur .j-1;
        if(judge(i, temp, temp))
        {
            queue[++rear] = node(i, temp, &queue[front]);
            visit[i][temp] = 1;
        }
    }

    node *tmp;
    tmp = &queue[front];

    while(tmp != NULL)
    {
        printf("(%d, %d)\n", tmp->i, tmp->j);
        tmp = tmp->pre;
    }
    return 0;
}
时间: 2024-08-03 11:23:42

POJ9384 迷宫问题(基础BFS)的相关文章

FZU1205/SDUT1157_小鼠迷宫问题(DFS+BFS)

解题报告 http://blog.csdn.net/juncoder/article/details/38146041 题目传送门 题意 求最短路和最短路的路数. 思路: BFS+DFS,先求出最短路.在DFS搜等于最短路的条数. 不加优化SDUTOJ过了,数据就是水. 确定了最短路的长度,加上奇偶剪枝FOJ也过了. #include <queue> #include <cmath> #include <cstdio> #include <cstring>

hdu1241 基础BFS

题意:问整个图中有几个油田,油田的八个方向都算同一块. 思路:先找到一个油田,进行BFS搜索,找到一个就标记一个,知道找不到位置.再找一个油田搜索.如此下去就可以找到所有的 #include<cstdio> #include<cstring> #include<queue> struct node { int x,y; node(int x = 0,int y = 0) : x(x),y(y){} }; const int maxn = 200; int dx[8] =

POJ 3287 (基础BFS) Catch That Cow

这是做的第一道BFS,很基础很简单的题目 广度优先搜索算法如下:(用QUEUE)(1) 把初始节点S0放入Open表中:(2) 如果Open表为空,则问题无解,失败退出:(3) 把Open表的第一个节点取出放入Closed表,并记该节点为n:(4) 考察节点n是否为目标节点.若是,则得到问题的解,成功退出:(5) 若节点n不可扩展,则转第(2)步:(6) 扩展节点n,将其不在Closed表和Open表中的子节点(判重)放入Open表的尾部,并为每一个子节点设置指向父节点的指针(或记录节点的层次)

HDU1728 逃离迷宫 【方向BFS】

逃离迷宫 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 15120    Accepted Submission(s): 3650 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可以穿越,有些地

HDU1272 小希的迷宫(基础并查集)

杭电的图论题目列表,共计500题,努力刷吧 AC 64ms #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> const int INF = 1e8; using namespace std; int father[100010]; bool vis[100010]; int findx(int r) {

POJ 3984:迷宫问题【BFS】

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11603   Accepted: 6946 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表示可以走的路,只能横着走或竖着走,不能斜着走,

(简单) POJ 3984 迷宫问题,BFS。

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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线. 水题,BFS然后记录路径就好. 代码如下: #include<iostream> #include<cstring> #

迷宫---DFS和BFS解法

题目描述 Description 在N*N的迷宫内,"#"为墙,"."为路,"s"为起点,"e"为终点,一共4个方向可以走.从左上角((0,0)"s")位置处走到右下角((n-1,n-1)"e")位置处,可以走通则输出YES,不可以走则输出NO. 输入描述 Input Description 输入的第一行为一个整数m,表示迷宫的数量. 其后每个迷宫数据的第一行为一个整数n(n≤16),表

SDUT 1157-小鼠迷宫问题(BFS&amp;DFS)

小鼠迷宫问题 Time Limit: 1500ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 小鼠a与小鼠b身处一个m×n的迷宫中,如图所示.每一个方格表示迷宫中的一个房间.这m×n个房间中有一些房间是封闭的,不允许任何人进入.在迷宫中任何位置均可沿上,下,左,右4个方向进入未封闭的房间.小鼠a位于迷宫的(p,q)方格中,它必须找出一条通向小鼠b所在的(r,s)方格的路.请帮助小鼠a找出所有通向小鼠b的最短道路. 请编程对于给定的小鼠的迷宫,计算小鼠a通向小