BFS-POJ-3984-迷宫问题
2015-08-09 16:29
543 查看
迷宫问题
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 11333 Accepted: 6784
Description
定义一个二维数组:
int maze[5][5] = {
};
它表示一个迷宫,其中的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)
水题,BFS保存路径即可。
Time Limit: 1000MS Memory Limit: 65536K
Total Submissions: 11333 Accepted: 6784
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表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
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)
水题,BFS保存路径即可。
// // main.cpp // 简单搜索-K-迷宫问题 // // Created by 袁子涵 on 15/8/9. // Copyright (c) 2015年 袁子涵. All rights reserved. // #include <iostream> #include <string.h> #include <stdio.h> using namespace std; bool maze[6][6]; bool visit[6][6]; typedef struct node { int x,y; struct node *pre; }Node; typedef struct queue { int head,tail; Node data[50]; }Queue; Queue q; Node final,out[50]; void init_queue() { q.head=0; q.tail=0; } bool empty_queue() { if (q.head==q.tail) { return 0; } return 1; } void bfs() { Node t; q.data[0].x=0; q.data[0].y=0; visit[0][0]=1; q.tail++; while (empty_queue()) { t=q.data[q.head]; //判断是否到终点 if (t.x==4 && t.y==4) { final=q.data[q.head]; return; } //上下左右 if (t.x>0 && visit[t.x-1][t.y]==0 && maze[t.x-1][t.y]==0) { q.data[q.tail].x=t.x-1; q.data[q.tail].y=t.y; q.data[q.tail].pre=&q.data[q.head]; q.tail++; visit[t.x-1][t.y]=1; } if (t.x<4 && visit[t.x+1][t.y]==0 && maze[t.x+1][t.y]==0) { q.data[q.tail].x=t.x+1; q.data[q.tail].y=t.y; q.data[q.tail].pre=&q.data[q.head]; q.tail++; visit[t.x+1][t.y]=1; } if (t.y>0 && visit[t.x][t.y-1]==0 && maze[t.x][t.y-1]==0) { q.data[q.tail].x=t.x; q.data[q.tail].y=t.y-1; q.data[q.tail].pre=&q.data[q.head]; q.tail++; visit[t.x][t.y-1]=1; } if (t.y<4 && visit[t.x][t.y+1]==0 && maze[t.x][t.y+1]==0) { q.data[q.tail].x=t.x; q.data[q.tail].y=t.y+1; q.data[q.tail].pre=&q.data[q.head]; q.tail++; visit[t.x][t.y+1]=1; } q.head++; } } int main(int argc, const char * argv[]) { Node *p1,*p2; for (int i=0; i<5; i++) { for (int j=0; j<5; j++) { cin >> maze[i][j]; } } bfs(); p1=&final; int t=0; while (p1!=NULL) { p2=p1->pre; out[t].x=p1->x; out[t].y=p1->y; t++; p1=p2; } while (t--) { printf("(%d, %d)\n",out[t].x,out[t].y); } return 0; }
相关文章推荐
- Clone Graph
- MinGW 使用 mintty 终端替代默认终端以解决界面上复制与粘贴的问题
- 【练习题】硬币组合
- iOS中用模型取代字典的好处
- android 如何结束一个线程
- How to regress out unwanted vectors
- blade模板
- JavaScript学习笔记——DOM_对document对象的内容、属性、样式的操作
- GDB调试程序(四)
- LeetCode #2 Add Two Numbers
- git学习之旅(四)——回退版本
- 华为OJ(输出单链表倒数第K个节点)
- POJ 1995 Raising Modulo Numbers
- cocoapods
- white-space: nowrap;
- python 爬虫中文乱码问题
- GDB调试程序(三)
- Linux面试
- 大二层技术对比分析
- DNS挟持介绍