#include<bits/stdc++.h> using namespace std; int n,m,b[1000][1000],fx[4]={-1,1,0,0},fy[4]={0,0,-1,1},c,d,e,f; char a[1000][1000]; void dfs(int x,int y,int k){ b[x][y]=k; for(int i=0;i<=3;i++){ int tx=x+fx[i]; int ty=y+fy[i]; if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]!='#'){ if(a[tx][ty]=='x'&&k+2<b[tx][ty])dfs(tx,ty,k+2); else if(a[tx][ty]!='x'&&k+1<b[tx][ty])dfs(tx,ty,k+1); } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; b[i][j]=5000; if(a[i][j]=='a'){ c=i; d=j; } if(a[i][j]=='r'){ e=i; f=j; } } } dfs(e,f,0); if(b[c][d]==5000)cout<<"Impossible"; else { cout<<b[c][d]; // for(int i=1;i<=n;i++){ // for(int j=1;j<=m;j++){ // cout<<b[i][j]<<setw(3); // } // cout<<endl; // } } return 0; } //中文翻译: //1.定义n,m char型a[1000][1000] int型的b[1000][1000] int fx[4]={-1,1,0,0};int fy[4]={0,0,-1,1}; //2.输入n,m a[1000][1000] 将500加入b数组 //3.定义c,d,e,f分别找出公主的x,y 骑士的x,y //4. dfs(e,f,0) //4.1 void dfs(int x,int y,int k){ //b[x][y]=k; // 4.2循环4次{ // 4.2.1 int tx=x+fx[i];int ty=y+fy[i]; // 4.2.2 if(tx与ty在舞台内并且a[tx][ty]!='#'){ // 4.2.2.1 if(a[tx][ty]=='x'&&未走过)dfs(tx,ty,k+2); // 4.2.2.2 else if(a[tx][ty]!='x'未走过)dfs(tx,ty,k+1); // } // } //} //5.if(b[c][d]==500)cout<<"Impossible"; //else cout<<b[c][d]; /************************************************************** Problem: 1901 User: chenjingqi Language: C++ Result: Accepted Time:13 ms Memory:6956 kb ****************************************************************/