AcWing 3179. 穿越雷区
原题链接
简单
作者:
贩卖日落_02
,
2025-04-05 21:53:14
· 河南
,
所有人可见
,
阅读 1
#include <bits/stdc++.h>
using namespace std;
int n;
int a1,b1,c2,d2;
char g[100][100];
int dist[100][100];
bool visited[100][100];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
int min_steps = INT_MAX;
void dfs(int x, int y, int steps, char ch) {
if(steps>=min_steps) return ;
if (x==c2&&y==d2) {
min_steps = min(min_steps,steps);
return;
}
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx <= 0 || nx >n || ny <=0 || ny > n) continue;
if(visited[nx][ny]) continue;
if(g[nx][ny] ==ch) continue;
visited[nx][ny] = true;
dfs(nx, ny, steps + 1,g[nx][ny] );
visited[nx][ny] = false;
}
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
cin >> g[i][j];
if(g[i][j]=='A') a1=i,b1=j;
if(g[i][j]=='B') c2=i,d2=j;
}
dfs(a1,b1,0,'A');
if(min_steps != INT_MAX) cout<<min_steps;
else cout<<-1;
return 0;
}