【bfs】 poj 3984 maze 队列存储

#include <iostream>
 #include <stdio.h>
 #include <cstring>
 #define Max 0x7f7f7f7f
 using namespace std;

 int map[6][6];
 int visited[6][6];
 int dir[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
 int ans[6][6];
 int pre[30];
 struct node
 {
     int x;
     int y;
 };
 node path[30];

 void output(int head)
 {
     int tmp=pre[head];
     if(tmp==0)
     {
         printf("(%d, %d)\n",path[tmp].x,path[tmp].y);
     }
     else
     {
         output(tmp);
     }
      printf("(%d, %d)\n",path[head].x,path[head].y);
 }
 void bfs()
 {
     memset(visited,0,sizeof(visited));
     memset(ans,Max,sizeof(ans));
     int head=0;
     int tail=1;
     pre[head]=-1;
     path[head].x=0;
     path[head].y=0;
     visited[path[head].x][path[head].y]=1;
     while(head<tail)
     {
         int x=path[head].x;
         int y=path[head].y;
         if(x==4 && y==4)
         {
             output(head);
             return ;
         }
         for(int i=0;i<4;i++)
         {
             int xx=x+dir[i][0];
             int yy=y+dir[i][1];
             if(visited[xx][yy]==0 && xx>=0 && xx<5 && yy>=0 && yy<5 && map[xx][yy]!=1)
             {
                 path[tail].x=xx;
                 path[tail].y=yy;
                 pre[tail]=head;
                 tail++;
                 visited[xx][yy]=1;
             }
         }
         head++;
     }
 }
 int main()
 {
//     freopen("in.txt","r",stdin);
     int i,j;
     for(i=0;i<5;i++)
     {
         for(j=0;j<5;j++)
         {
             scanf("%d",&map[i][j]);
         }
     }
     bfs();
     return 0;
 }
时间: 2024-08-25 10:14:27

【bfs】 poj 3984 maze 队列存储的相关文章

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:迷宫问题(广搜,入门题)

迷宫问题 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

POJ 3017 单调队列dp

Cut the Sequence Time Limit: 2000MS   Memory Limit: 131072K Total Submissions: 8764   Accepted: 2576 Description Given an integer sequence { an } of length N, you are to cut the sequence into several parts every one of which is a consecutive subseque

Java队列存储结构及实现

一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队列来说,每个元素总是从队列的rear端进入队列,然后等待该元素之前的所有元素出队之后,当前元素才能出对,遵循先进先出(FIFO)原则. 如果队列中不包含任何元素,该队列就被称为空队列. 二.顺序队列存储结构的实现 1 package com.ietree.basic.datastructure.qu

C# Azure 队列存储

1.前言 本篇文章是根据Azure的官网document总结,如果想直接跳过本文章,可以点击下面的链接进入. https://www.azure.cn/zh-cn/documentation/articles/storage-dotnet-how-to-use-queues/ 2.介绍 Azure 队列存储是一项可存储大量消息的服务,用户可以通过经验证的调用,使用 HTTP 或 HTTPS 从世界任何地方访问这些消息.一条队列消息的大小最多可为 64 KB,一个队列中可以包含数百万条消息,直至达

Sliding Window POJ - 2823 单调队列模板题

Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间最小值 就是维护一个单调递增的序列 对于样例 8 3 1 3 -1 -3 5 3 6 7 我们先模拟一遍 1.队列为空 1 进队 队列:1 2.3>队尾元素 3 进队 队列: 1 3 3.-1小于队尾元素,一直从尾部出队知道找到比-1小的元素或者队列为空 队列:-1 当队列中元素大于m的时候从队头删

POJ 3984 迷宫问题(简单bfs+路径打印)

传送门: http://poj.org/problem?id=3984 迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33105   Accepted: 18884 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, }; 它表示一个

POJ 3984 迷宫问题 bfs 难度:0

http://poj.org/problem?id=3984 典型的迷宫问题,记录最快到达某个点的是哪个点即可 #include <cstdio> #include <cstring> #include <queue> using namespace std; const int maxn=10; const int inf=0x3fffffff; struct pnt { int x,y; pnt(){x=y=0;} pnt(int tx,int ty){x=tx,y