Untitled

 avatar
unknown
plain_text
a year ago
2.1 kB
3
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;
}