Untitled
unknown
plain_text
a year ago
1.6 kB
4
Indexable
#include<iostream> using namespace std; const int INF = 87654321; int t, tc, n,m, visited[101][101]; char a[101][101]; int front, rear, qX[10001], qY[10001]; int hx[8]={-2,-1,1,2,2,1,-1,-2}; int hy[8]={-1,-2,-2,-1,1,2,2,1}; int kx[8]={-1,-1,-1,0,0,1,1,1}; int ky[8]={-1,0,1,-1,1,-1,0,1}; int startX, startY, endX, endY; void BFS(int x, int y){ front = rear = -1; visited[x][y] = 1; qX[++rear] = x; qY[rear] = y; while(front != rear){ x = qX[++front]; y = qY[front]; for(int k =0; k<8; k++){ int tx = x + kx[k]; int ty = y + ky[k]; if(tx>=0 && tx<m && ty>=0 && ty<n && (a[tx][ty] == '.' || a[tx][ty] == 'B') && visited[tx][ty] > visited[x][y] +1){ qX[++rear] = tx; qY[rear] = ty; visited[tx][ty] = visited[x][y] + 1; } } } } int main(){ //freopen("input.txt", "r", stdin); cin>>t; for(tc =1; tc<=t; tc++){ cin>>n>>m; for(int i=0; i<m; i++){ for(int j=0; j<n; j++){ visited[i][j] = 7654321; cin>>a[i][j]; if(a[i][j] == 'A'){ startX = i; startY = j; } if(a[i][j] == 'B'){ endX = i; endY = j; } } } for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ if(a[i][j]=='Z'){ for(int z=0;z<8;z++){ int nx=i+hx[z]; int ny=j+hy[z]; if(nx>=0 && nx<m && ny>=0 && ny<n && a[nx][ny]=='.'){ a[nx][ny]='N'; } } } } } int ans=0; BFS(startX,startY); ans=visited[endX][endY]; if(ans==7654321) cout<<-1<<endl; else cout<<ans-1<<endl; } return 0; }
Editor is loading...
Leave a Comment