#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;
}