首页 > 代码库 > 迷宫问题

迷宫问题

  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 }

 

迷宫问题