定义一个二维数组:
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> #include<queue> #include<map> #include <deque>//双向队列 using namespace std; int mapn[8][8],vis[8][8]; struct node{ int x,y; }; struct ss{ deque<node> qq;//队列套队列 }; int dx[]={0,0,1,-1},dy[]={1,-1,0,0},num; ss bfs(){ node p; p.x = 1,p.y = 1; ss qz; qz.qq.push_back(p); vis[1][1] = 1; queue<ss> q; q.push(qz); num = 0; while(!q.empty()){ ss mm = q.front(); node tmp = mm.qq.back(); q.pop(); if(tmp.x == 5 && tmp.y == 5){ return mm; } for(int i=0;i<4;i++){ int xx = tmp.x + dx[i]; int yy = tmp.y + dy[i]; if(!vis[xx][yy] && mapn[xx][yy] == 0 && xx>0 && xx<=5 && yy>0 && yy<=5){ vis[xx][yy] = 1; ss tm = mm; node tp = tm.qq.back(); tp.x = xx,tp.y = yy; tm.qq.push_back(tp); q.push(tm); } } } return q.front(); } int main(){ for(int i=1;i<=5;i++){ for(int j=1;j<=5;j++){ cin >> mapn[i][j]; } } ss q = bfs(); while(!q.qq.empty()) { node sl = q.qq.front(); q.qq.pop_front();//取前面删除前面 cout << "(" << sl.x-1 << ", " << sl.y-1 << ")" << endl; } return 0; }