简单BFS +打印路径 迷宫问题 POJ - 3984

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
using namespace std;
int nex[4][2]= { {0,1},{1,0},{0,-1},{-1,0} };
typedef struct
{
    int x,y;
} Point;
int a[10][10],vis[10][10];
int pre[50];
Point l[50];
int print(int t)
{
    if(pre[t]==-1)
    {
        printf("(%d, %d)\n",l[t].x,l[t].y);
        return 1;
    }
    else
    {
        if(print(pre[t]))
        {
            printf("(%d, %d)\n",l[t].x,l[t].y);
            return 1;
        }
    }
}
void bfs()
{

    int head,tail;
    int x1,x2,y1,y2;
    memset(vis,0,sizeof(vis));
    l[0].x=0,l[0].y=0;
    head=0;
    tail=1;
    pre[0]=-1;
    vis[0][0]=1;
    while(head<tail)
    {
        x1=l[head].x;
        y1=l[head].y;
        for(int i=0; i<4; i++)
        {
            x2=x1+nex[i][0];
            y2=y1+nex[i][1];
            if(x2>=0&&x2<5&&y2>=0&&y2<5&&!a[x2][y2]&&!vis[x2][y2])
            {
                pre[tail]=head;
                l[tail].x=x2,l[tail].y=y2;
                if(x2==4&&y2==4)
                {
                    print(tail);
                    return ;
                }
                tail++;
                vis[x2][y2]=1;
            }
        }
        head++;
    }
}
int main()
{
    for(int i=0; i<5; i++)
        for(int j=0; j<5; j++)
            scanf("%d",&a[i][j]);
    bfs();
    return 0;
}
时间: 2024-10-31 14:02:38

简单BFS +打印路径 迷宫问题 POJ - 3984的相关文章

POJ 3414 Pots(bfs打印路径)

题意:给定两个空桶的容量分别为A.B,经过6种操作使获得C升水,求最少操作数: 思路:广搜.最少操作数很简单,练习一下打印路径:打印最短路劲就是每次记录当前状态和上一步,找到终点后查找路径. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define INF 0x3f3f3f3f int A,B,C; int shortest[150][150];//更新最短步数

迷宫问题 POJ 3984

http://poj.org/problem?id=3984 定义一个二维数组:  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 左上角到

hdu 1026 Ignatius and the Princess I (bfs打印路径)

Problem Description The Princess has been abducted by the BEelzebub feng5166, our hero Ignatius has to rescue our pretty Princess. Now he gets into feng5166's castle. The castle is a large labyrinth. To make the problem simply, we assume the labyrint

UVA - 116 - Unidirectional TSP (简单DP + 打印路径)

题目传送:UVA - 116 思路:可以定义状态为dp[i][j] 为从第i行第j列开始往后走到第n列(总共n列)的最小值(赋初始值为无穷),且状态方程很好推出来:dp[i][j] = a[i][j] + max(dp[i-1][j+1], dp[i][j+1], dp[i+1][j+1]);    最后最优解  ans = max(dp[i][1])(1<=i<=m); 不过这题难点不在这里,而是可能有多组最小值,输出字典序最小的那组: 这里要注意好递推的方向,只能从右往左递推列数,而如果从

BFS(最短路+路径打印) POJ 3984 迷宫问题

题目传送门 1 /* 2 BFS:额,这题的数据范围太小了.但是重点是最短路的求法和输出路径的写法. 3 dir数组记录是当前点的上一个点是从哪个方向过来的,搜索+,那么回溯- 4 */ 5 /************************************************ 6 Author :Running_Time 7 Created Time :2015-8-4 9:02:06 8 File Name :POJ_3984.cpp 9 ********************

poj 3984 迷宫问题 (BFS+记录路径)

题目连接:http://poj.org/problem?id=3984 题解:简单的BFS+记录路径,具体题解看代码注释. #include <iostream> #include <queue> #include <cstdio> using namespace std; struct point { int x; int y; }; queue<point>q; int map[5][5]; int vis[5][5];//标记走过的路 int g[4]

poj 3984:迷宫问题(广搜,入门题)

迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 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和DFS解题,也可以构建图,然后利用Dijsktra解题. 不过因为数据很少,就没必要使用Dijsktra了. BFS和DFS效率都是一样的,因为都需要搜索所有可能的路径,并记录最短路径和当前路径. 推荐使用DFS,感觉会方便很多,BFS会麻烦很多,因为需要记录并比较路径. #include <stdio.h> #include <string.h> #include <limits.h> const int MAX_N = 5; const int

学霸的迷宫(BFS+记录路径)

1 //求从(sx.sy)到(gx.gy)的最短距离; 2 3 #include<iostream> 4 #include<cstdio> 5 #include<cstdio> 6 #include<queue> 7 #include<cstring> 8 #define INF 99999999 9 10 using namespace std; 11 12 typedef pair<int, int > P; //数对,记录位置