Untitled
unknown
plain_text
2 years ago
1.7 kB
4
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...