POJ 3984 bfs

   作了一年的ACMer竟然现在才学BFS。。。

  好吧,BFS第一题

  赤裸裸的裸题

  

  

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 int a[10][10];
 6 struct node
 7 {
 8     int x,y;
 9 } que[100];
10 int pre[100],vis[10][10];
11 int bfs()
12 {
13
14     int l = 0,r = 1;
15     memset(vis,0,sizeof(vis));
16     que[0].x = 1;que[0].y = 1;
17     vis[0][0] = 1;pre[0] = -1;
18     while(l<r)
19     {
20         int x = que[l].x,y = que[l].y;
21         for(int i = -1;i<=1;i++)
22             for(int j = -1;j<=1;++j)if((i==0&&j!=0) || (i!=0&&j==0))
23             {
24                 if(a[x+i][y+j]==1||vis[x+i][y+j]||x+i<1||x+i>5||y+j<1||y+j>5)continue;
25                 vis[x+i][y+j] = 1;
26                 que[r].x = x+i;
27                 que[r].y = y+j;
28                 pre[r++] = l;
29                 if(x+i==5&&y+j==5)return r-1;
30             }
31         l++;
32     }
33
34     return 0;
35 }
36 void print(int x)
37 {
38     if(x==-1)return;
39     print(pre[x]);
40     printf("(%d, %d)\n",que[x].x-1,que[x].y-1);
41 }
42 int main()
43 {
44 //    freopen("in.txt","r",stdin);
45     while(~scanf("%d",&a[1][1]))
46     {
47         for(int i = 1;i<=5;++i)for(int j = (i==1?2:1);j<=5;++j)
48             scanf("%d",&a[i][j]);
49         print(bfs());
50     }
51     return 0;
52 }

  

时间: 2024-12-09 22:30:27

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 Multiple (BFS,同余定理)

http://poj.org/problem?id=1465 Multiple Time Limit: 1000MS   Memory Limit: 32768K Total Submissions: 6164   Accepted: 1339 Description a program that, given a natural number N between 0 and 4999 (inclusively), and M distinct decimal digits X1,X2..XM

poj 2243 bfs 利用 结构体中的step成员保存步数 ,STL的队列

//BFS #include <iostream> #include <queue> using namespace std; bool used[8][8]; int move[8][2]={1,2, -1,2, -2,1, -2,-1, -1,-2, 1,-2, 2,-1, 2,1}; struct position { int i,j; int step; position(int a,int b,int c) { i=a; j=b; step=c; } }; int mai

poj 1915 BFS 利用 pre 计算步数------------------路径

// BFS #include <stdio.h> #include <string.h> int visited[301][301]; // visited 已经访问过了 int dic[8][2]={{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}}; int head,end,n,ex,ey,sx,sy; struct quene { int x,y,pre; // pre 前一个结点 }q[100000]; vo

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 迷宫问题(简单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, }; 它表示一个