Untitled
unknown
plain_text
a year ago
2.1 kB
5
Indexable
#include<iostream> using namespace std; int n, m, A[205][205]; int visited[205][205]; int x, y, e, f; int rs[4] = {-1, 0, 1, 0}; int cs[4] = {0, 1, 0, -1}; int top; int top2; int start; int start2; int queue[40000]; int queue2[40000]; int congchua(int p, int q){ visited[p][q] = true; int c, d; int b1, b2; //int min = 3000; while(top!=start && top2!=start2){ c = queue[start]; start++; d = queue2[start2]; start2++; //if(c==e && d == f) break; for(int i=c+1; i<=n; i++){ if(A[i][d]==1) break; if(A[i][d]==0 && visited[i][d]==false){ queue[top] = i; queue2[top2] = d; top++; top2++; visited[i][d]=visited[i][d] + 1; A[i][d] = A[c][d]+1; } } for(int i=c-1; i>=0; i--){ if(A[i][d]==1) break; if(A[i][d]==0 && visited[i][d]==false){ queue[top] = i; queue2[top2] = d; top++; top2++; visited[i][d]=visited[i][d] + 1; A[i][d] = A[c][d]+1; } } for(int i=d+1; i<=m; i++){ if(A[c][i]==1) break; if(A[c][i]==0 && visited[c][i]==false){ queue[top] = c; queue2[top2] = i; top++; top2++; visited[c][i]=visited[c][i] + 1; A[c][i] = A[c][d]+1; } } for(int i=d-1; i>=0; i--){ if(A[c][i] == 1) break; if(A[c][i]==0 && visited[c][i]==false){ queue[top] = c; queue2[top2] = i; top++; top2++; visited[c][i]=visited[c][i] + 1; A[c][i] = A[c][d]+1; } } } if(visited[e][f]==true) return A[e][f]-1; return -1; } int main(){ // freopen("in.txt", "r", stdin); int t; cin>>t; for(int tc=1; tc<=t; tc++){ cin>>m>>n; cin>>y>>x; cin>>f>>e; char s; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++){ cin>>s; if(s=='1') A[i][j]=1; else A[i][j]=0; } for(int i=0; i<=n+1; i++) for(int j=0; j<=m+1; j++){ visited[i][j] = false; if(i==0||j==0||i==n+1||j==m+1) A[i][j]=1; } top=1; top2 = 1; start=0; start2 = 0; queue[0] = x; queue2[0] = y; cout<<congchua(x,y)<<endl; } return 0; }
Editor is loading...