Untitled
unknown
plain_text
a year ago
1.6 kB
7
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