Untitled
unknown
plain_text
2 years ago
1.5 kB
2
Indexable
#include<iostream> using namespace std; int q_x[100000]; int q_y[100000]; int bot=-1; int top=-1; void push(int i,int j) { bot++; q_x[bot]=i; q_y[bot]=j; } void pop(){top++;}; bool is_emty(){return top==bot;} //-------------------------------- int N,M; int x_start,y_start,x_end,y_end; int map[51][51]; int vis[51][51]; int dx[4]= {0,-1,0,1}; int dy[4]= {-1,0,1,0}; bool BFS(int i,int j,int d) { top=bot=-1; push(i,j); vis[i][j]=1; while(!is_emty()) { int f1 = q_x[top+1]; int f2 = q_y[top+1]; pop(); for(int k=0;k<4;k++) { for(int i=1;i<=d;i++){ int i1 = f1+i*dx[k]; int j1 = f2+dy[k]; if(i1>=0&&i1<N && j1>=0&&j1<M && vis[i1][j1]==0) { if(i1==x_end&&j1==y_end) return 1; if(map[i1][j1]!=0) { vis[i1][j1]=1; push(i1,j1); } } } } } return 0; } void reset() { for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { vis[i][j]=0; } } } int main() { int T; cin>>T; for(int tc=1;tc<=T;tc++) { cin>>N>>M; reset(); for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { cin>>map[i][j]; if(map[i][j]==2) { x_start=i; y_start=j; } else if(map[i][j]==3) { x_end=i; y_end=j; } } } int ans=0; for(int d=1;d<=N-1;d++) { if(BFS(x_start,y_start,d)) { ans=d; break; } reset(); } cout<<"Case #"<<tc<<endl<<ans<<endl; } return 0; }
Editor is loading...