54 lines
1.8 KiB
C++
54 lines
1.8 KiB
C++
#include <bits/stdc++.h>
|
||
using namespace std;
|
||
const int N = 1010;
|
||
int a[N][N];//装地图,1:代表有障碍物,0:代表是空地,2:代表是空地但我走过
|
||
int main() {
|
||
//配置从文本文件读入数据
|
||
freopen("explore.in","r", stdin);
|
||
freopen("explore.out","w", stdout);
|
||
|
||
int T;
|
||
cin >> T;
|
||
while(T--){
|
||
//多组测试数据清空数据是最重要的
|
||
memset(a, 0, sizeof(a));//0:代表是空的,没有输入过
|
||
//n, m 表示地图的行数和列数,k 表示机器人执行操作的次数
|
||
int n, m, k;
|
||
cin >> n >> m >> k;
|
||
//(x,y):机器人的初始坐标,d是初始的朝向
|
||
int x, y, d;
|
||
cin >> x >> y >> d;
|
||
a[x][y] = 2;
|
||
|
||
for (int i = 1; i <= n;i++)
|
||
for (int j = 1; j <= m;j++){
|
||
char q;
|
||
cin >> q;
|
||
if (q == 'x') a[i][j] = 1;//障碍物是1,否则是0,0就不填写了
|
||
}
|
||
//至此,输入结束
|
||
while(k--){
|
||
int nx, ny;
|
||
if (d == 0) nx = x, ny = y + 1;
|
||
if (d == 1) nx = x + 1, ny = y;
|
||
if (d == 2) nx = x, ny = y - 1;
|
||
if (d == 3) nx = x - 1, ny = y;
|
||
if(a[nx][ny]==1 || nx>n || ny>m|| nx<1 || ny<1) {
|
||
d = (d + 1) % 4;
|
||
//cout << "Turn d=" << d << endl;
|
||
}
|
||
else {
|
||
x = nx, y = ny, a[x][y] = 2;
|
||
//cout << "x=" << x << ",y=" << y << " d=" << d << endl;
|
||
}
|
||
}
|
||
//输出结果
|
||
int cnt = 0;
|
||
for (int i = 1;i<=n;i++)
|
||
for (int j = 1;j<=m;j++)
|
||
if (a[i][j] == 2) cnt++;
|
||
cout << cnt << endl;
|
||
}
|
||
return 0;
|
||
}
|