首页 > 其他分享 >POJ3984 迷宫问题(BFS 记忆路径)

POJ3984 迷宫问题(BFS 记忆路径)

时间:2023-04-20 21:38:25浏览次数:47  
标签:POJ3984 迷宫 BFS int Limit Output Input include


迷宫问题


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


Submit  Status  Practice  POJ 3984


System Crawler  (2014-09-11)



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<stdio.h>
#include<string.h>
#include<stdlib.h>

int map[10][10];
int v[100][100];
int n,m;
int jx[] = {0,1,-1,0};
int jy[] = {1,0,0,-1};
int tt;
struct node
{
    int x,y,z;
}q[10000];

void tf(int k)
{
    if(q[k].z!=-1)
    {
        tf(q[k].z);
        printf("(%d, %d)\n",q[k].x,q[k].y);
    }
}

void BFS(int s,int e)
{
    memset(v,0,sizeof(v));
    struct node t,f;
    int i;
    t.x = s;
    t.y = e;
    t.z = -1;
    v[t.x][t.y] = 1;
    q[e++] = t;
    while(s<e)
    {
        t = q[s++];
        if(t.x == 4 && t.y == 4)
        {
            printf("(0, 0)\n");
            tf(s-1);
            return ;
        }
        for(i=0;i<4;i++)
        {
            f.x = t.x + jx[i];
            f.y = t.y + jy[i];
            if(f.x>=0 && f.x<=4 && f.y>=0 && f.y<=4 && map[f.x][f.y] == 0 && v[f.x][f.y] == 0)
            {
                f.z = s-1;
                q[e++] = f;
                v[f.x][f.y] = 1;
            }
        }
    }

}
int main()
{
    int i,j;
    tt = 0;
    n = 5;
    m = 5;
    for(i=0;i<n;i++)
    {
        for(j=0;j<5;j++)
        {
            scanf("%d",&map[i][j]);
        }
    }
    BFS(0,0);
    return 0;
}


标签:POJ3984,迷宫,BFS,int,Limit,Output,Input,include
From: https://blog.51cto.com/u_14834528/6210672

相关文章

  • nyoj 坦克大战 284 (bfs) 模板
    坦克大战1000ms |          内存限制:655353Manyofushadplayedthegame"Battlecity"inourchildhood,andsomepeople(likeme)evenoftenplayitoncomputernow.Whatwearediscussingisasimpleeditionofthisgame.Givena......
  • 已确定迷宫求解所有路线(递归)
    importjava.lang.reflect.Array;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.List;publicclassMazePath{ publicstaticvoidmain(String[]args){ int[][]maze={{0,1,0,0,0,0}, {0,1,1,0,0,0}, {0,0,......
  • 最短时间——BFS
    最短时间有若干个城市,它们之间有道路连通,可以互相到达,从一个城市到另一个城市时间为1。现在给出起点城市A,终点城市B,和N条道路。问从A到B最短时间。输入第一行A,B,N(A,B,N<=30),B为最大城市标号接下来N行,每行两个数x,y,表示城市x和城市y有道路相连。输出输出最短时间。样例输入......
  • 迷宫最短路径
    定义一个二维数组: intmaze[n][m]; 它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。intmaze[6][7]={0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,1,0,0,0,1,0,0,1,0,1,0,0,0,0,1,0,1,......
  • 间君闯迷宫
    【题目描述】指间君被迷宫困住了,因为指间君的体力是有限的,所以它一共只能走m次,每走一步指间君会积累一定的经验值也可能会消耗一定的经验值,当经验值积累到245单位后,指间君会被立即传送到终点。当指间君的经验值为15的倍数时,指间君会被传送回起点,而且经验值清零。请问指间君一......
  • LeetCode 双周赛 102,模拟 / BFS / Dijkstra / Floyd
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,欢迎来到小彭的LeetCode周赛解题报告。昨晚是LeetCode双周赛第102场,你参加了吗?这场比赛比较简单,拼的是板子手速,继上周掉大分后算是回了一口血......
  • kuangbin专题一 简单搜索 迷宫问题(POJ-3984)
    迷宫问题TimeLimit:1000MS MemoryLimit:65536KDescription定义一个二维数组:intmaze[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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编......
  • kuangbin专题一 简单搜索 起火迷宫(UVA-11624)
    Fire!DescriptionJoeworksinamaze.Unfortunately,portionsofthemazehavecaughtonfire,andtheownerofthemazeneglectedtocreateafireescapeplan.HelpJoeescapethemaze.GivenJoe’slocationinthemazeandwhichsquaresofthemazeareo......
  • hdu 1272 小希的迷宫
    这是我第一次用并查集解决问题,其实刷这道题就是为了学习并查集,这是学长在hdu上找的模板题#include<iostream>#include<cstdio>usingnamespacestd;constintN=110000;intpar[N],mark[N];intfind1(intx){intr=x;while(par[r]!=r)r=par[r];......
  • POJ 1753 Flip Game(bfs枚举+递推)
    题目地址:http://poj.org/problem?id=1753这题此前曾经做过,但当时是用的纯BFS做的,然后后来又做了一次组队赛,那是16*16的,果断超时超内存。。能超的都超了。。于是又找了个更好的方法,就是枚举第一行,然后后面的根据第一行的情况推下去。比如,你要让所有的都变成W,如果上一行的对应位置是B......