迷宫问题的分析与实现

来源:互联网 发布:python java socket 编辑:程序博客网 时间:2024/06/07 02:48

【问题描述】

以一个 m*n的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论  


其中二维矩阵中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。相关博文

c++实现源码


/*迷宫问题*/#include<iostream>#include<stack>using namespace std;char maze[10][10] ={{ '0','1','1','1','1','1','1','1','1','1' },{ '0','1','0','1','1','1','1','1','1','1' },{ '0','0','0','1','1','1','1','0','0','0' },{ '1','0','0','0','0','1','1','0','1','0' },{ '1','0','1','1','0','1','1','0','1','0' },{ '1','0','1','1','0','1','1','0','1','0' },{ '1','1','0','0','0','1','1','0','1','0' },{ '1','1','0','1','1','1','1','0','1','0' },{ '1','1','0','0','0','0','0','0','1','0' },{ '1','1','1','1','1','1','1','1','1','0' },};/*打印源数据*/void Show(){for (int i = 0; i < sizeof(maze) / sizeof(maze[0]); i++){for (int j = 0; j < sizeof(maze[0]) / sizeof(maze[0][0]); j++){cout << maze[i][j] << " ";}cout << endl;}}/*递归查找*/void RecFind(int i, int j){if (maze[i][j] == '1')   return;if (maze[i][j] == '@')   return;if (maze[i][j] = '@' && j == 9 && i == 9){cout << "找到路径" << endl;Show();exit(0);}maze[i][j] = '@';RecFind(i, j + 1);RecFind(i + 1, j);RecFind(i, j - 1);RecFind(i - 1, j);}/*非递归实现*/void NoRecFind(){int i = 0;int j = 0;stack<char> s;s.push(maze[i][j]);maze[i][j] = '@';cout << "进入方法!" << endl;while (true){if (maze[i][j + 1] == '0'){s.push(maze[i][++j]);maze[i][j] = '@';}else if (maze[i + 1][j] == '0'){s.push(maze[++i][j]);maze[i][j] = '@';}else if (maze[i][j - 1] == '0'){s.push(maze[i][--j]);maze[i][j] = '@';}else if (maze[i - 1][j] == '0'){s.push(maze[--i][j]);maze[i][j] = '@';}if (maze[i][j + 1] != '0' && maze[i + 1][j] != '0' &&maze[i][j - 1] != '0' && maze[i - 1][j] != '0'){if (i >= 9 && j >= 9){break;}else{maze[i][j] = '*';s.pop();}char tmp = s.top();s.push(tmp);}}Show();}int main(){Show();RecFind(0, 0);NoRecFind();return  0;}





原创粉丝点击