http://poj.org/problem?id=3984迷宫问题
#include<iostream>
#include<stack>
using namespace std;
const int N = 5;
int maze[N][N];
typedef struct PathNode{
int x;
int y;
int nstep;//就是加个记录步数的变量
}PathNode;
stack<PathNode> path;
void NextStep(int x, int y, int nstep)
{
PathNode next;
if(y+1 < N && !maze[x][y+1]){//向东走
maze[x][y+1] = nstep+1;
next.x = x;
next.y = y+1;
next.nstep = nstep+1;
path.push(next);
}
else if(x+1 < N && !maze[x+1][y]){
maze[x+1][y] = nstep + 1;
next.x = x+1;
next.y = y;
next.nstep = nstep + 1;
path.push(next);
}
else if(y-1 > 0 && !maze[x][y-1]){
maze[x][y-1] = nstep + 1;
next.x = x;
next.y = y -1;
next.nstep = nstep + 1;
path.push(next);
}
else if(x-1 > 0 && !maze[x-1][y]){
maze[x-1][y] = nstep + 1;
next.x = x - 1;
next.y = y;
next.nstep = nstep + 1;
}
else path.pop();
}
int main()
{
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
cin>>maze[i][j];
PathNode first = {0, 0, 1};
maze[0][0] = 1;
path.push(first);
while( !path.empty() ){
PathNode now = path.top();
int x = now.x, y = now.y;
int nstep = now.nstep;
if(x == 4 && y == 4){
break;
}
NextStep(x, y, nstep);
}
int step = 1;
for(int i = 0; i < N; ++i)
for(int j = 0; j < N; ++j)
if(maze[i][j] == step){
cout<<"("<<i<<", "<<j<<")"<<endl;
++step;
}
///system("pause");
return 0;
}