Problem | Result | Memory | Time | Language | Code Length |
3984 | Accepted | 708K | 0MS | G++ | 1471B |
#include <iostream>
#include <queue>
#include <utility>
#include <stack>
using namespace std;
//中国 MOOC 郭炜老师的例题
int a[5][5];
int b[5][5];
int dx[4]={1,0,-1,0};
int dy[4]={0,1,0,-1};
queue<pair<int,int> > que;
int main()
{
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cin>>a[i][j];
}
}
pair<int,int> init(0,0);
que.push(init);
b[0][0]=1;
while(que.empty()!=1)
{
pair<int,int> t;
t=que.front();
que.pop();
int x,y;
x=t.first;
y=t.second;
//cout<<"( "<<x<<","<<y<<" )"<<endl;
if((x==4)&&(y==4))
{
break;
}
for(int i=0;i<4;i++)
{
int ax,ay;
ax=x+dx[i];
ay=y+dy[i];
if((ax>=0)&&(ax<5)&&(ay>=0)&&(ay<5))
{
if((a[ax][ay]==0)&&(b[ax][ay]==0))
{
b[ax][ay]=b[x][y]+1;
pair<int,int> t1(ax,ay);
que.push(t1);
}
}
}
}
stack<pair<int, int> > st;
int x,y;
x=4;
y=4;
pair<int, int> t(x,y);
st.push(t);
//cout<<"( "<<x<<","<<y<<" )"<<endl;
while(1)
{
for(int i=0;i<4;i++)
{
int ax,ay;
ax=x+dx[i];
ay=y+dy[i];
if((ax>=0)&&(ax<5)&&(ay>=0)&&(ay<5))
{
if(b[x][y]==(b[ax][ay]+1))
{
x=ax;
y=ay;
pair<int, int> t1(x,y);
st.push(t1);
//cout<<"( "<<x<<","<<y<<" )"<<endl;
}
}
}
if((x==0)&&(y==0))
{
break;
}
}
while(st.empty()!=1)
{
cout<<"("<<st.top().first<<", "<<st.top().second<<")"<<endl;
st.pop();
}
/*
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cout<<b[i][j]<<" ";
}
cout<<endl;
}*/
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/c9bbc3929f8c9d1e74714e8cca6800f0.png)