Untitled
unknown
plain_text
3 years ago
1.7 kB
7
Indexable
#include<iostream>
using namespace std;
int m,n;
char M[400][400];
int vs[400][400];
char Qx[100000];
char Qy[100000];//>maxsize
int Qd[100000];
int r=-1,f=-1;
int d[400][400];
void push(int x, int y, int d){
r++;
Qx[r]=x;
Qy[r]=y;
Qd[r]=d;
}
void pop(int &x, int &y, int &d)
{
f++;
x=Qx[f];
y=Qy[f];
d=Qd[f];
}
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
bool checkbien(int x, int y)
{
if(x<0||y<0||x>=m||y>=n) return false;
return true;
}
int BFS(int x, int y, int d, int ex, int ey)
{
push(x,y,d);
while(r!=f){
pop(x,y,d);
//kt lan kan
bool ok=true;
if(checkbien(x,y)){
for(int i=0;i<4;i++){
//issafe
int xx=x+dx[i];
int yy=y+dy[i];
if(M[xx][yy]=='E' && d+1< vs[xx][yy]){
push(xx,yy,d+1);
vs[xx][yy]=d+1;
}
else if(M[xx][yy]=='B' && d+2 < vs[xx][yy]){
push(xx,yy,d+2);
vs[xx][yy]=d+2;
}
else if(M[xx][yy]=='T'){
vs[xx][yy]=d+1;
//return vs[ex][ey];
}
}
}
}
//if(vs[ex][ey]==999999) vs[ex][ey]=-1;
return vs[ex][ey];
//return -1;
}
int main(){
freopen("input.txt","r",stdin);
int t;
cin>>t;
int tx,ty,yx,yy;;
int f=-1,r=-1;
for(int tc=1;tc<=t;tc++){
cin>>m>>n;
//reset
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
vs[i][j]= 999999;
}
}
//NHAP DAU VAO
for(int i=0;i<m;i++){
cin>>M[i];
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(M[i][j]=='Y'){
yx=i;yy=j;
}
else if(M[i][j]=='T'){
tx=i;ty=j;
}
}
}
//cout << tx <<" " << ty<< endl;
//cout << "Case #"<<tc<<endl;
cout<< BFS(yx,yy,0,tx,ty)<<endl;
//cout << yx <<" " << yy<< endl;
}
return 0;
}Editor is loading...