首页 > 代码库 > BFS PKU3984
BFS PKU3984
题目已经说了有唯一的解。所以仅仅须要在找的过程中保存当前这个点前面的那个的点在队列中的位置
然后再输出的时候运用递归输出就能够了。
迷宫问题
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8238 | Accepted: 4848 |
Description
定义一个二维数组:
它表示一个迷宫。当中的1表示墙壁,0表示能够走的路,仅仅能横着走或竖着走,不能斜着走。要求编程序找出从左上角到右下角的最短路线。
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 <stdlib.h> #include <malloc.h> #include <limits.h> #include <ctype.h> #include <string.h> #include <string> #include <queue> #include <math.h> #include <algorithm> #include <iostream> #include <stack> #include <deque> #include <vector> #include <set> using namespace std; #define MAXN 10 int xx[4]={-1,0,1,0}; int yy[4]={0,1,0,-1}; int vis[MAXN][MAXN]; int map[MAXN][MAXN]; int ans; struct node{ int x,y; int pre; }q[111]; int start=0; int end = 1; void print(int x){ if(q[x].pre != -1){ print(q[x].pre); printf("(%d, %d)\n",q[x].x,q[x].y); } } void BFS(int x,int y){ int i; vis[x][y] = 1; q[start].x = x; q[start].y = y; q[start].pre = -1; while(start < end){ if(q[start].x==4 && q[start].y==4){ print(start); } for(i=0;i<4;i++){ int dx = xx[i] + q[start].x; int dy = yy[i] + q[start].y; if(dx>=0 && dx<5 && dy>=0 && dy<5 && vis[dx][dy]==0 && map[dx][dy]==0){ q[end].x = dx; q[end].y = dy; vis[dx][dy] = 1; q[end].pre = start; end++; } //if(dx==4 && dy==4){ // print(start); //} } start++; } } int main(){ int i,j; for(i=0;i<5;i++){ for(j=0;j<5;j++){ cin>>map[i][j]; } } memset(vis,0,sizeof(vis)); printf("(0, 0)\n"); BFS(0,0); //printf("(4, 4)\n"); return 0; }
BFS PKU3984
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。