22 poj2935 Basic Wall Maze --- bfs

对于每个点有四个方向可以走,把墙两边的点对应墙的方向能不能走给预处理一下,用vis[x][y][0..3]表示点(x,y)的该方向可不可以走。

然后bfs就好了,记录路径就把每个结点的前一个点记录下来,递归输出就可以了。

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;

int dx[]={0,0,1,-1};
int dy[]={1,-1,0,0};
bool vis[7][7][4],vvis[7][7];
char di[4]={'S','N','E','W'};
int sx,sy,ex,ey;
struct node
{
    int x,y,dir;
}pre[10][10];

void print(int xx,int yy)
{
    if(xx==sx&&yy==sy) return ;
    print(pre[xx][yy].x,pre[xx][yy].y);
    printf("%c",di[pre[xx][yy].dir]);//输出该点方向

}

void bfs()
{
    queue<node> q;
    memset(vvis,0,sizeof vvis);//标记这个点走没走过
    vvis[sx][sy]=1;
    q.push((node){sx,sy,-1});//从起点开始走
    while(!q.empty())
    {
        node now=q.front();q.pop();
        if(now.x==ex&&now.y==ey)//到终点就输出 题目保证有解
        {
            print(ex,ey);
            puts("");
            return ;
        }
        for(int i=0;i<4;i++)
        {
            if(!vis[now.x][now.y][i])//该方向可以走
            {
                int xx=now.x+dx[i];
                int yy=now.y+dy[i];
                if(!vvis[xx][yy]&&xx>0&&xx<=6&&yy>0&&yy<=6)//该点没走过,且没有越界
                {
                    vvis[xx][yy]=1;
                    pre[xx][yy]=(node){now.x,now.y,i};
                    q.push((node){xx,yy,i});
                }
            }
        }
    }
}
int main()
{
    int i,j,a,b,c,d;
    while(scanf("%d%d",&sx,&sy)&&(sx||sy))
    {
        scanf("%d%d",&ex,&ey);
        memset(vis,0,sizeof vis);
        for(i=0;i<3;i++)
        {
            scanf("%d%d%d%d",&a,&b,&c,&d);
            if(a==c)//横着的墙
            {
                for(j=b+1;j<=d;j++)
                {
                    if(a!=0) vis[a][j][2]=1;
                    if(a!=6) vis[a+1][j][3]=1;
                }
            }
            else//竖着的墙
            {
                for(j=a+1;j<=c;j++)
                {
                    if(b!=0) vis[j][b][0]=1;
                    if(b!=6) vis[j][b+1][1]=1;
                }
            }
        }
        bfs();
    }
    return 0;
}
时间: 2024-10-25 05:29:47

22 poj2935 Basic Wall Maze --- bfs的相关文章

POJ2935 Basic Wall Maze bfs记录路径

链接:   POJ2935 题意: 6 X 6的地图   格子和格子可能有墙      整个地图中有三道墙      求起点起点到终点的路径 本题中的墙可以理解为某a位置的X方向不能走   即用一个三维数组map[x][y][z]表示(x,y)的Z方向不能走 关于记录路径可以用一个pre数组记录每个坐标的前一个坐标的复合值  最后倒序输出方向即可 代码 #include<iostream> #include<cstdio> #include<cstring> #incl

POJ 2935 Basic Wall Maze

http://poj.org/problem?id=2935 Basic Wall Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2794   Accepted: 1271   Special Judge Description In this problem you have to solve a very simple maze consisting of: a 6 by 6 grid of unit sq

HDU 1484 Basic wall maze (dfs + 记忆化)

Basic wall maze Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 168    Accepted Submission(s): 52 Special Judge Problem Description In this problem you have to solve a very simple maze consisti

【HDOJ】1484 Basic wall maze

BFS. 1 /* 1484 */ 2 #include <iostream> 3 #include <queue> 4 #include <string> 5 #include <cstdio> 6 #include <cstring> 7 #include <algorithm> 8 using namespace std; 9 10 typedef struct { 11 int x, y; 12 string s; 13 }

POJ3026——Borg Maze(BFS+最小生成树)

Borg Maze DescriptionThe Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. The Borg collective is the term used to describe the group consciousness of the Borg civilization. Each Borg individual is linked

POJ 3026 Borg Maze &amp; UVA 10307 Killing Aliens in Borg Maze(BFS,最小生成树)

http://poj.org/problem?id=3026 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1248 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8498   Accepted: 2862 Description The Bor

poj 3026 Borg Maze (bfs + 最小生成树)

链接:poj 3026 题意:y行x列的迷宫中,#代表阻隔墙(不可走),空格代表空位(可走),S代表搜索起点(可走) A代表外星人站(可走),现在要从S出发,将S和所有的A之间都连通,求路线总距离最小值 分析:可以先用bfs将所有的A,S两两之间的最短距离,题目的目的是将S与所有的A连通,使得总距离最小, 所有任选一点开始按最小生成树的算法做就行,并非非要从S点开始 注:题目输入x,y后可能有很多空格,可以用gets将多余的空格取走,开数组是尽量开大点,之前虽然开的比题目数据     稍大,但一

(BFS)poj2935-Basic Wall Maze

题目地址 题目与最基本的BFS迷宫的区别就是有一些障碍,可以通过建立三维数组,标记某个地方有障碍不能走.另一个点是输出路径,对此建立结构体时要建立一个pre变量,指向前一个的下标.这样回溯(方法十分经典)就可以顺利的输出. 这道题难度的确很小,可是我却花了近两个小时才顺利AC,实在是现在水平太不足了,要努力学习的真的是有好多啊.不管怎样,尽力吧. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4

poj 3026 Borg Maze(bfs+prim)

Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10810   Accepted: 3574 Description The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the galaxy. The Borg collective is the term used to desc