bfs板子题
题目:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;
const int N = 20;
char s[N][N];
int t[N][N];
int x[10] = {0,1,0,-1,1,1,-1,-1};
int y[10] = {1,0,-1,0,1,-1,1,-1};
int bfs(int a , int b)
{
queue<PII> q;
PII n(a,b);
q.push(n);
while(!q.empty()){
PII m = q.front();
q.pop();
int i = m.first , j = m.second ;
//cout<<i<<" "<<j<<endl;
for(int k = 0 ; k < 4 ;k ++){
a = i + x[k] , b = j + y[k];
if(a >= 0 && a < 12 && b >= 0 && b < 12 && !t[a][b]){
if(s[a][b] == 'F'){
n = {a,b};
q.push(n);
t[a][b] = t[i][j] + 1;
}
if(s[a][b] == 'H' || s[a][b] =='Q' || s[a][b] == 'X'){
// cout<<"aaa"<<endl;
return t[i][j] + 1;
}
}
}
}
return 0;
}
int main()
{
for(int i = 0 ; i < 12 ; i ++) scanf("%s",s[i]);
//cout<<endl;
int x_1 , y_1;
for(int i = 0 ; i < 12 ; i ++){
for(int j = 0 ; j < 12 ; j ++){
for(int k = 0 ; k < 8 ; k ++){
int a = i + x[k], b = j + y[k];
if(a >= 0 && a <= 12 && b >= 0 && b <= 12 && s[i][j] == 'J'){
s[a][b] = '1';
}
}
if(s[i][j] == 'Z') x_1 = i , y_1 = j;
}
//cout<<s[i]<<endl;
}
cout<<bfs(x_1,y_1);
return 0;
}