1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
#include<bits/stdc++.h> using namespace std; const int maxn=1e3+7; bool vis[maxn][maxn]; char g[maxn][maxn]; int m,n; int dx[]={1,0,-1,0}; int dy[]={0,1,0,-1}; struct Stack{ int x; int y; }S[maxn]; int top=0; void init(){ top=0; memset(vis,false,sizeof(vis)); memset(g,0,sizeof(g)); } void Push(int x,int y){ S[top].x=x; S[top].y=y; top++; } void Pop(){ top--; } void Top(int &x,int &y){ if(top==0) return; x=S[top-1].x; y=S[top-1].y; } bool Empty(){ if(top) return false; else return true; } void solve(){ int x,y; while(!Empty()){ Top(x,y); bool fl=true; int nx=x+dx[0],ny=y+dy[0]; int cnt=0; while(g[nx][ny]=='#'||vis[nx][ny]||nx<0||ny<0||nx>=m||ny>=n){ cnt++; if(cnt>3){ Pop(); fl=false; break; } nx=x+dx[cnt];ny=y+dy[cnt]; } if(!fl) continue; Push(nx,ny); vis[nx][ny]=true; if(g[nx][ny]=='S'){
for(int i=0;i<top;i++){ cout<<S[i].x<<' '<<S[i].y<<endl; } } } } int main(){ init(); int ax,ay; cin>>m>>n; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ char c;cin>>c; g[i][j]=c; if(c=='A') {ax=i;ay=j;} } } Push(ax,ay); vis[ax][ay]=true; solve(); }
|