首页 > 代码库 > 迷宫问题
迷宫问题
1 #include <iostream> 2 #include <fstream> 3 #include <cstring> 4 #include "unistd.h" 5 #include<sys/time.h> 6 #include<sys/types.h> 7 using namespace std; 8 #define MAX_ROW 20 9 #define MAX_COL 20 10 #define MAX_STACK_SIZE 400 11 #define EXIT_ROW 11 12 #define EXIT_COL 16 13 char map[MAX_ROW][MAX_COL]; 14 char mark[MAX_ROW][MAX_COL]; 15 16 int row ,col; 17 void loadMap(int* row,int *col) { 18 ifstream fin("map.txt"); 19 fin>>*row>>*col; 20 *row += 2; 21 *col+=2; 22 for(int i=0; i<*row; i++) { 23 for(int j=0; j<*col; j++) { 24 fin>>map[i][j]; 25 mark[i][j] = map[i][j]; 26 } 27 } 28 } 29 30 void printMap() { 31 for(int i=0; i<row; i++) { 32 for(int j=0; j<col; j++) { 33 cout<<mark[i][j]<<" "; 34 } 35 cout<<endl; 36 } 37 } 38 struct offsets { 39 short int vert; 40 short int horiz; 41 }; 42 offsets move[8]= {-1,0, -1,1, 0,1, 1,1, 1,0, 1,-1, 0,-1, -1,-1}; 43 44 struct element { 45 short int row; 46 short int col; 47 short int dir; 48 }; 49 element stack[MAX_STACK_SIZE]; 50 int top = -1; 51 52 element delete_stack(int *t) { 53 return stack[(*t)--]; 54 } 55 void add(int *t,element ele) { 56 stack[++*t] = ele; 57 } 58 void path() { 59 60 int i,row,col,next_row,next_col,dir; 61 bool found=false; 62 element position; 63 mark[1][0]=‘$‘; 64 top = 0; 65 stack[0].row = 1; 66 stack[0].col = 0; 67 stack[0].dir = 0; 68 while(top>-1&&!found) { 69 position = delete_stack(&top); 70 mark[position.row][position.col]=‘1‘; 71 row = position.row; 72 col = position.col; 73 dir = position.dir; 74 printMap(); 75 usleep(500000); 76 while(dir<8&&!found) { 77 next_row = row + move[dir].vert; 78 next_col = col + move[dir].horiz; 79 if(next_row==EXIT_ROW&&next_col ==EXIT_COL) { 80 found = true; 81 } else if(map[next_row][next_col]==‘0‘&&mark[next_row][next_col]==‘0‘) { 82 mark[next_row][next_col]=‘$‘; 83 position.row = row; 84 position.col = col; 85 position.dir = ++dir; 86 add(&top,position); 87 printMap(); 88 usleep(500000); 89 row = next_row; 90 col = next_col; 91 dir = 0; 92 } else ++dir; 93 } 94 95 } 96 if(found) { 97 cout<<"you win!"<<endl; 98 } else { 99 cout<<"do not have a path!"<<endl;100 }101 }102 int main() {103 loadMap(&row,&col);104 printMap();105 path();106 return 0;107 }
迷宫问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。