POJ - 3984
#include<iostream>
#include<stack>
#include<vector>
#include<queue>
using namespace std;
int to[4][2]= {{1,0},{-1,0},{0,1},{0,-1}};
int mmp[5][5],a[100];
struct node
{
int x,y;
} temp1,temp2;
bool judge(int xx,int yy)
{
if(xx<0||xx>4||yy<0||yy>4)
return false;
if(mmp[xx][yy]==1)
return false;
return true;
}
int que[205][205][2];
stack<pair<int,int > >stk;
void bfs()
{
queue<node>q;
temp1.x=temp1.y=0;
q.push(temp1);
mmp[temp1.x][temp1.y]=1;
while(!q.empty())
{
temp1=q.front();
q.pop();
for(int i=0; i<4; i++)
{
temp2.x=temp1.x+to[i][0];
temp2.y=temp1.y+to[i][1];
if(judge(temp2.x,temp2.y))
{
mmp[temp2.x][temp2.y]=1;
que[temp2.x][temp2.y][0]=temp1.x;
que[temp2.x][temp2.y][1]=temp1.y;
q.push(temp2);
}
}
}
}
int main()
{
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
cin>>mmp[i][j];
bfs();
int px, py;
px=py=4;
stk.push(make_pair(px,py));
while(1)
{
int tempx=que[px][py][0];
int tempy=que[px][py][1];//必须暂时变量存值
px=tempx;
py=tempy;
stk.push(make_pair(px,py));
if(px==0&&py==0)
break;
}
while(!stk.empty())
{
cout<<"("<<stk.top().first<<", "<<stk.top().second<<")"<<endl;
stk.pop();
}
return 0;
}