迷宫问题
2016-04-21 09:44
351 查看
Description
定义一个二维数组:
它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input
一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output
左上角到右下角的最短路径,格式如样例所示。
Sample Input
Sample Output
定义一个二维数组:
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<iostream> using namespace std; int map[5][5]; int dx[4]= {1,-1,0,0}; int dy[4]= {0,0,-1,1}; int front=0,rear=1; struct node { int x,y,pre; } q[100]; void print(int i)//输出过程 { if(q[i].pre!=-1) { print(q[i].pre); cout<<"("<<q[i].x<<", "<<q[i].y<<")"<<endl; } } void bfs(int x1,int y1)//广搜 { q[front].x=x1; q[front].y=y1; q[front].pre=-1; while(front<rear)//当队列不空 { for(int i=0; i<4; i++) //搜索可达的路径 { int a=dx[i]+q[front].x; int b=dy[i]+q[front].y; if(a<0||a>=5||b<0||b>=5||map[a][b])//是否在迷宫内,是否可行 continue; else { map[a][b]=1; //走过的路做标记 q[rear].x=a; //记录的是下一个front的值(front++) q[rear].y=b; q[rear].pre=front; // cout<<'('<<q[rear].x<<'.'<<q[rear].y<<')'<<" "<<"q["<<rear<<"].pre="<<q[rear].pre<<" "<<" rear="<<rear<<" front="<<front<<endl; rear++; //入队 } if(a==4&&b==4) { // cout<<front<<"kkkkkk"<<endl; print(front); } } front++;//出队 } } int main() { int i,j; for(i=0; i<5; i++) for(j=0; j<5; j++) cin>>map[i][j]; cout<<"(0, 0)"<<endl; bfs(0, 0); cout<<"(4, 4)"<<endl; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性