迷宫问题

  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 }

 

posted on 2014-12-13 21:22  Payne_Day  阅读(114)  评论(1编辑  收藏  举报

导航