|
|
#include <bits/stdc++.h>
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
//用于模拟的矩阵
|
|
|
int lin[1000][1000] = {0}; //小林走过的路
|
|
|
int hua[1000][1000] = {0}; //小华走过的路
|
|
|
|
|
|
int main() {
|
|
|
int t, n, x, y, d; // t:测试数据组数,n:是n*n的矩阵
|
|
|
// 上北,下南,左西,右东
|
|
|
// d=0 表示右; d=1 表示下;d=2 表示左;d=3 表示上
|
|
|
// x++ y++ x-- y--
|
|
|
// 小林会向右转,小华则会向左转
|
|
|
cin >> t;
|
|
|
// t次录取
|
|
|
for (int i = 0; i < t; ++i) {
|
|
|
cin >> n; // n*n矩阵
|
|
|
//(x,y)读入初始位置,d:一开始跑的方向
|
|
|
//小林
|
|
|
cin >> x >> y >> d;
|
|
|
//标识走过这个点
|
|
|
lin[x][y] = 1;
|
|
|
|
|
|
//第几步
|
|
|
int step = 1;
|
|
|
//模拟小林走路,小林会向右转
|
|
|
while (true) {
|
|
|
// (1)向右走,到头了,准备向下
|
|
|
if (d == 0 && y < n - 1 && lin[x][y + 1] == 0) {
|
|
|
lin[x][++y] = ++step;
|
|
|
} else if (d == 0 && y == n - 1) {
|
|
|
d = 1;
|
|
|
} else
|
|
|
// (2)向下走,到头了,准备向左
|
|
|
if (d == 1 && x < n - 1 && lin[x + 1][y] == 0) {
|
|
|
lin[++x][y] = ++step;
|
|
|
} else if (d == 1 && x == n - 1) {
|
|
|
d = 2;
|
|
|
} else
|
|
|
// (3)向左走,到头了,准备向上
|
|
|
if (d == 2 && y > 0 && lin[x][y - 1] == 0) {
|
|
|
lin[x][--y] = ++step;
|
|
|
} else if (d == 2 && y == 0) {
|
|
|
d = 3;
|
|
|
} else
|
|
|
// (4)向上走,到头了,准备向右
|
|
|
if (d == 3 && x > 0 && lin[x - 1][y] == 0) {
|
|
|
lin[--x][y] = ++step;
|
|
|
} else if (d == 3 && x == 0) {
|
|
|
d = 4;
|
|
|
} else {
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
//输出小林的路线
|
|
|
for (int j = 0; j < n; ++j) {
|
|
|
for (int k = 0; k < n; ++k) {
|
|
|
cout << lin[j][k] << " ";
|
|
|
}
|
|
|
cout << endl;
|
|
|
}
|
|
|
//**小华开始***************************************************************************/
|
|
|
//小华
|
|
|
step = 1;
|
|
|
cin >> x >> y >> d;
|
|
|
//标识走过这个点
|
|
|
hua[x][y] = 1;
|
|
|
|
|
|
//模拟小华走路,小华则会向左转
|
|
|
while (true) {
|
|
|
// (1)向右走,到头了,准备向上
|
|
|
if (d == 0 && y < n - 1 && hua[x][y + 1] == 0) {
|
|
|
hua[x][++y] = ++step;
|
|
|
} else if (d == 0 && y == n - 1) {
|
|
|
d = 3;
|
|
|
} else
|
|
|
// (2)向下走,到头了,准备向右
|
|
|
if (d == 1 && x < n - 1 && hua[x + 1][y] == 0) {
|
|
|
hua[++x][y] = ++step;
|
|
|
} else if (d == 1 && x == n - 1) {
|
|
|
d = 0;
|
|
|
} else
|
|
|
// (3)向左走,到头了,准备向下
|
|
|
if (d == 2 && y > 0 && hua[x][y - 1] == 0) {
|
|
|
hua[x][--y] = ++step;
|
|
|
} else if (d == 2 && y == 0) {
|
|
|
d = 1;
|
|
|
} else
|
|
|
// (4)向上走,到头了,准备向左
|
|
|
if (d == 3 && x > 0 && hua[x - 1][y] == 0) {
|
|
|
hua[--x][y] = ++step;
|
|
|
} else if (d == 3 && x == 0) {
|
|
|
d = 2;
|
|
|
} else
|
|
|
break;
|
|
|
}
|
|
|
//输出小华的路线
|
|
|
for (int j = 0; j < n; ++j) {
|
|
|
for (int k = 0; k < n; ++k) {
|
|
|
cout << hua[j][k] << " ";
|
|
|
}
|
|
|
cout << endl;
|
|
|
}
|
|
|
}
|
|
|
//输出结果
|
|
|
int min = INT32_MAX;
|
|
|
int min_x = -1;
|
|
|
int min_y = -1;
|
|
|
for (int j = 0; j < n; ++j) {
|
|
|
for (int k = 0; k < n; ++k) {
|
|
|
if (lin[j][k] == hua[j][k] && hua[j][k]>0) {
|
|
|
if (lin[j][k] < min) {
|
|
|
min = lin[j][k];
|
|
|
min_x = j;
|
|
|
min_y = k;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (min == INT32_MAX) cout << -1 << endl;
|
|
|
else cout << min_x << " " << min_y << endl;
|
|
|
return 0;
|
|
|
}
|