POJ 3984 迷宫问题 _BFS

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define CL(x, y) memset(x, y, sizeof(x))
 6 using namespace std;
 7 const int MAX = 5;
 8 int N, i, j, a, b, flag;
 9 int chessboard[MAX*MAX], used[MAX][MAX],maze[MAX][MAX];
10 int Move[4][2]= {{0,1},{1,0},{0,-1},{-1,0}};
11 void DFS(int x, int y, int z);
12 int main()
13 {
14     for(i = 0; i < MAX; i++)
15         for(j = 0; j < MAX; j++)
16             cin >> maze[i][j];
17     CL(used, 0);
18     CL(chessboard, 0);
19     DFS(0, 0, 0);
20     return 0;
21 }
22 void DFS(int x, int y, int z)//z表示所走的步数
23 {
24     used[x][y] = 1;
25     chessboard[z] = x * 10 + y;//此处用于记录新的坐标数, chessboard[][]的范围一定要注意
26 //    cout << chessboard[z] << " " << z << endl;
27     if(x==MAX-1 && y==MAX-1)
28     {
29         for(i = 0; i <= z; i++)
30             printf("(%d, %d)\n",chessboard[i]/10,chessboard[i]%10);
31         return ;
32     }
33     for(i = 0; i < 4; i++)
34     {
35         int xx = x + Move[i][0];
36         int yy = y + Move[i][1];
37         if(maze[xx][yy]!=1 && xx>=0 && xx<MAX && yy>=0 && yy<MAX && !used[xx][yy])//此处a,b反过来,b:代表字母,a:代表数字
38         {
39             used[xx][yy] = 1;
40             DFS(xx,yy,z+1);
41             used[xx][yy] = 0;
42         }
43     }
44     return ;
45 }

曾经多么厉害的迷宫问题,当我在这段期间的ACM刷题中,我找不到任何当初畏惧的感觉。。。。

原来人是会变的,现在我都不想停下来

时间: 2024-10-01 02:21:13

POJ 3984 迷宫问题 _BFS的相关文章

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 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

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: 16724   Accepted: 9981 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> #

POJ 3984 迷宫问题 bfs

题目链接:迷宫问题 天啦撸.最近怎么了.小bug缠身,大bug 不断.然这是我大腿第一次给我dbug.虽然最后的结果是.我............bfs入队列的是now.............. 然后.保存路径的一种用的string .一种用的数组.大同小异.根据就是我bfs 先搜到的绝壁就是步数最少的. 附代码: pre 数组 1 /* 2 很简单的广搜.如果不是+路径输出的话.. 3 保存路径. 4 */ 5 6 #include <stdio.h> 7 #include <str