`

C++迷宫

 
阅读更多
#include <iostream>
#include <iomanip>
#include "Stack.h"
 
//#define UNIT_TEXT
 
usingstd::cout;
usingstd::cin;
usingstd::endl;
usingstd::setw;
 
DIRECTION getNextDirection(DIRECTION d) {
    switch(d) {
    case NORTH:
       d= EAST;
       break;
    case EAST:
       d= SOUTH;
       break;
    case SOUTH:
       d= WEST;
       break;
    case WEST:
       d= NORTH;
       break;
    }
 
    return d;
}
 
int main(int argc, char*argv[]) {
    // MAZE
    //int mazeArray[X][Y] = {
    //  {1, 0, 1, 1},
    //  {1, 0, 1, 1},
    //  {1, 1, 1, 1},
    //  {1, 1, 0, 1},
    //};
   
    //int mazeArray[][8] = {
    //  {1, 1, 0, 1, 1, 1,0, 0},
    //  {0, 1, 0, 1, 0, 1,0, 0},
    //  {0, 1, 1, 1, 0, 1,0, 0},
    //  {0, 0, 0, 0, 0, 1,0, 0},
    //  {0, 0, 0, 1, 1, 1,0, 0},
    //  {0, 0, 0, 1, 0, 0,0, 0},
    //  {0, 0, 0, 1, 0, 0,1, 1},
    //  {0, 0, 0, 1, 1, 1,1, 1},
    //};
   
    //int mazeArray[][12] = {
    //  {1, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0},
    //  {1, 0, 1, 0, 0, 0,0, 0, 0, 0, 0, 0},
    //  {1, 1, 1, 0, 1, 1,1, 0, 0, 0, 0, 0},
    //  {0, 0, 1, 0, 1, 0,1, 0, 0, 0, 0, 0},
    //  {0, 0, 1, 0, 1, 0,1, 0, 0, 0, 0, 0},
    //  {0, 1, 1, 0, 1, 0,1, 0, 0, 0, 0, 0},
    //  {0, 1, 1, 1, 1, 0,1, 0, 0, 0, 0, 0},
    //  {0, 0, 0, 0, 0, 1,1, 0, 0, 0, 0, 0},
    //  {0, 0, 0, 0, 0, 1,0, 1, 1, 1, 1, 1},
    //  {0, 0, 0, 0, 0, 1,0, 1, 0, 0, 0, 1},
    //  {0, 0, 0, 0, 0, 1,1, 1, 0, 0, 0, 1},
    //  {0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 1},
    //};
 
      
    int mazeArray[][20] = {
       {1,1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //1
       {0,1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //2
       {1,1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //3
       {1,0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //4
       {1,1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //5
       {0,0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //6
       {0,0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //7
       {1,0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //8
       {1,0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //9
       {1,0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //10
       {1,0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},      //11
       {1,0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0},      //12
       {1,0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0},      //13
       {1,0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0},      //14
       {1,0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0},      //15
       {1,0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},      //16
       {1,0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0},      //17
       {1,0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0},      //18
       {0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0},      //19
       {0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1},      //20
    };
 
    //int mazeArray[][5] = {
    //  {1, 1, 1, 0, 0},
    //  {0, 0, 1, 0, 0},
    //  {0, 1, 1, 0, 0},
    //  {0, 1, 0, 1, 1},
    //  {0, 1, 1, 1, 1},
    //};
 
    //int mazeArray[][6] = {
    //  {1, 1, 0, 0, 0,0},
    //  {0, 1, 0, 0, 0,0},
    //  {1, 1, 0, 0, 0,0},
    //  {1, 0, 0, 0, 0,0},
    //  {1, 0, 0, 1, 1,1},
    //  {1, 1, 1, 1, 0,1},
    //};
   
    StackmazeStack;
    MAZEe;
    int i = 0, j = 0;
    int temp = 0;
    DIRECTIOND = EAST;
    bool shiftDirection = false;
 
    MAZEm1 = {i, j, EAST, EAST};
 
    mazeStack.push(m1);
    cout<< "从("<< i << "," << j<< ")开始探索...\n";
    int X = 20;
    int Y = 20;
 
    do {
       if(mazeStack.top->data.i == X - 1 &&mazeStack.top->data.j == Y - 1) {
           cout<< "到达出口!\n";
           break;
       }
 
       i= mazeStack.top->data.i;
       j= mazeStack.top->data.j;
 
       switch(mazeStack.top->data.d) {
       case NORTH:
           cout<< "开始探索北方向::";
           if(i > 0) {
              i--;
           }else {
              shiftDirection= true;
           }
           break;
       case EAST:
           cout<< "开始探索东方向::";
           if(j < X - 1) {
              j++;
           }else {
              shiftDirection= true;
           }
           break;
       case SOUTH:
           cout<< "开始探索南方向:";
           if(i < X - 1) {
              i++;
           }else {
              shiftDirection= true;
           }
           break;
       case WEST:
           cout<< "开始探索西方向:";
           if(j > 0) {
              j--;
           }else {
              shiftDirection= true;
           }
           break;
       }
 
       if(shiftDirection) {
           cout<< "已经到达边界, 切换方位...\n";
           mazeStack.top->data.d= getNextDirection(mazeStack.top->data.d);
 
           if(mazeStack.top->data.d ==mazeStack.top->data.o) {
              cout<< "此路径为错误路径,出栈!\n";
              mazeStack.pop(&e);
           }
           shiftDirection= false;
           continue;
       }
 
       if(mazeArray[i][j] == 1) {
           cout<< "\t探索 (" << i << "," << j << ") 成功!\n";
 
           // 设置起点方向
           switch(mazeStack.top->data.d) {
           case NORTH:
              D= SOUTH;
              break;
           case EAST:
              D= WEST;
              break;
           case SOUTH:
              D= NORTH;
              break;
           case WEST:
              D= EAST;
              break;
           }
 
           cout<< "切换上路径方位?...\n";
           mazeStack.top->data.d= getNextDirection(mazeStack.top->data.d);
 
           MAZEnewMaze = {i, j, getNextDirection(D), D};
          
           mazeStack.push(newMaze);
       }
       else {
           cout<< "\t探索(" << i << "," << j << ") 失败!\n";
 
           cout<< "切D换?方¤?位?...\n";
           mazeStack.top->data.d= getNextDirection(mazeStack.top->data.d);
 
           if(mazeStack.top->data.d ==mazeStack.top->data.o) {
              cout<< "此路径为错误路径出栈!\n";
              mazeStack.pop(&e);
           }
       }
    } while(!mazeStack.isEmpty());
 
 
    cin.get();
 
    return 0;
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics