princess code
unknown
plain_text
2 years ago
1.5 kB
11
Indexable
#include <iostream> using namespace std; int in1[201][201]; int in2[201][201]; int dem1[201][201]; int dem2[201][201]; int Qx[10000000]; int Qy[10000000]; int Qd[10000000]; int r = -1, f = -1; int dx[4]= {1,0,0,-1}; int dy[4]= {0,1,-1,0}; 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 BFS(int x, int y,int d,int a, int b, int n,int in[201][201], int dem[201][201]){ r = -1; f= -1; push(x,y,d); while(r != f){ pop(x,y,d); for(int i = 0; i < 4; i++){ int x1 = x + dx[i]; int y1 = y + dy[i]; if(x1 > 0 && x1 <= n && y1 > 0 && y1 <= n){ if(in[x1][y1] == 1 ){ push(x1,y1,d+1); in[x1][y1] = 0; if(d+1 < dem[x1][y1]){ dem[x1][y1] = d + 1; } } else if(x1 == a && y1 == b ){ dem[x1][y1] = d + 1; return dem[x1][y1]; } } } } return -1; } int main(){ int T; cin >> T; for(int tc = 1; tc <= T; tc++){ r = -1; f= -1; int n; cin >> n; int x,y; for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ cin >> in1[i][j]; in2[i][j] = in1[i][j]; dem1[i][j] = dem2[i][j] = 1000000; if(in1[i][j] == 2){ x = i; y = j; } } } int d1 = BFS(1,1,0,x,y,n,in1,dem1); int d2 = BFS(x,y,0,n,n,n,in2,dem2); if(d1 == -1 || d2 == -1){ cout << -1 << endl; } else if (d1 != -1 && d2 != -1){ cout << d1 + d2 << endl; } } return 0; }
Editor is loading...