迷宫问题求解
2012-05-30 21:58
204 查看
#include <cstdlib> #include <iostream> #include <stdio.h> #include <string.h> #include <conio.h> #define MAZE_INIT_SIZE 50 using namespace std; struct P{ int row; int col; int pre; }; struct MAZE{ char m[MAZE_INIT_SIZE][MAZE_INIT_SIZE]; int row,col; P s;//起点 P e;//终点 }; int f_row[4]={1,-1,0,0}; int f_col[4]={0,0,1,-1}; int check(int i,int j,struct MAZE maze)//判断 { if(i<0||j<0||i>=maze.row||j>=maze.col) return 0; if(maze.m[i][j]=='o') return 1; return 0; } void search(struct MAZE &maze); void maze_game() { struct MAZE maze; printf("%15s",""); cout<<"请输入迷宫的行数"; cin>>maze.row; while(maze.row<1) {printf("%15s","");cout<<"输入错误,请重新输入";cin>>maze.row;} printf("%15s",""); cout<<"请输入迷宫的列数"; cin>>maze.col; while(maze.col<1) {printf("%15s","");cout<<"输入错误,请重新输入";cin>>maze.col;} system("cls"); printf("%15s","");cout<<"注意:坐标从0开始\n"; printf("%15s",""); cout<<"请输入迷宫的起始点坐标"; cin>>maze.s.row; cin>>maze.s.col; maze.s.pre=-1; while(maze.s.row<0||maze.s.col<0||maze.s.row>=maze.row||maze.s.col>=maze.col) {printf("%15s","");cout<<"输入错误,请重新输入";cin>>maze.s.row>>maze.s.col;} printf("%15s",""); cout<<"请输入迷宫的起始点坐标"; cin>>maze.e.row; cin>>maze.e.col; maze.e.pre=-1; while(maze.e.row<0||maze.e.col<0||maze.e.col>=maze.col||maze.e.row>=maze.row) {printf("%15s","");cout<<"输入错误,请重新输入";cin>>maze.e.row>>maze.e.col;} system("cls"); //printf("%15s",""); cout<<"请输入迷宫地形,o表示空地#表示墙壁\n"; int i,j; for(i=0;i<maze.row;i++) for(j=0;j<maze.col;j++) {/*printf("\n%15s","");*/cin>>maze.m[i][j];} /*cout<<maze.row<<endl<<maze.col<<endl; cout<<maze.s.row<<' '<<maze.s.col<<endl; cout<<maze.e.row<<' '<<maze.e.col<<endl; for(i=0;i<maze.row;i++) {for(j=0;j<maze.col;j++) cout<<maze.m[i][j]; cout<<endl; }*/ search(maze); } void output(int end,P sq[]); void search(struct MAZE &maze) { P sq[MAZE_INIT_SIZE*MAZE_INIT_SIZE]; int begin=0,end=1; maze.m[maze.s.row][maze.s.col]='#'; sq[0].pre=-1; sq[0].row=maze.s.row; sq[0].col=maze.s.col; int i,j,k; while(begin<end) { for(k=0;k<4;k++) { i=sq[begin].row+f_row[k]; j=sq[begin].col+f_col[k]; if(check(i,j,maze)) {sq[end].row=i; sq[end].col=j; sq[end].pre=begin; maze.m[i][j]='#'; if((i==maze.e.row)&&(j==maze.e.col)) { system("cls"); printf("%5s","");cout<<"路径\n"; printf("%5s",""); output(end,sq); cout<<endl; return ; } end++; } } begin++; } system("cls"); printf("%15s",""); cout<<"没有可达路径"; } void output(int end,P sq[])//输出 { if(end==0) {cout<<"("<<sq[end].row<<","<<sq[end].col<<")";return ;} if(end>0) {output(sq[end].pre,sq);cout<<"-->("<<sq[end].row<<","<<sq[end].col<<")";return ;} } int main(int argc, char *argv[]) {maze_game(); system("PAUSE"); return EXIT_SUCCESS; }
相关文章推荐
- 最短路求解迷宫问题
- 迷宫问题的求解方式:应用深度优先和广度优先的搜索
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- 模拟求解迷宫问题(DFS+BFS)
- 关于迷宫求解及其最优解的问题
- ACM水题-Rescue LK(AC,迷宫问题,DFS求解)
- 栈的应用——迷宫求解问题
- 迷宫问题的C语言求解
- 回溯法求解n皇后和迷宫问题
- 深度优先搜索(DFS)求解迷宫问题
- 数据结构:栈和队列-迷宫问题求解
- 迷宫求解问题
- 数据结构和算法设计(迷宫求解问题的栈和队列的实现)
- 迷宫问题求解之“穷举+回溯”(一)
- C语言 数据结构中求解迷宫问题实现方法
- 迷宫求解问题
- 迷宫问题求解(C++递归程序)
- 经典算法<一>迷宫问题 4.多条路径 求路径条数求解 C++实现
- 迷宫求解问题的简易实现(C++)
- 迷宫求解问题