Wu16327 @ 2024-11-18 19:25:38
//
// Created by 16327 on 2024/11/17.
//
#include <bits/stdc++.h>
using namespace std;
vector<vector<char>> arr(1005,vector<char>(1005));
int main(){
int T,n,m,k,count=1;
char temp;
int x,y,d;
cin >> T;
while(T--){
cin >> n >> m >> k;
cin >> x >> y >> d;
x--,y--;
//地图
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin >> temp;
arr[i][j] = temp;
}
}
// for(int i=0;i<n;i++)
// for(int j=0;j<m;j++)
// cout << arr[i][j];
for(int i=0;i<k;i++) {
if (d == 0) {
if (arr[x][y + 1] == '.') {
y += 1;
count++;
continue;
}
} else {
d = (d + 1) % 4;
continue;
}
if (d == 1) {
if (arr[x + 1][y] == '.') {
x += 1;
count++;
continue;
}
} else {
d = (d + 1) % 4;
continue;
}
if (d == 2) {
if (arr[x][y - 1] == '.') {
y -= 1;
count++;
continue;
}
} else {
d = (d + 1) % 4;
continue;
}
if (d == 3) {
if (arr[x - 1][y] == '.') {
y -= 1;
count++;
continue;
}
} else {
d = (d + 1) % 4;
continue;
}
}
cout << count << endl;
count = 1;
}
return 0;
}
by wangshengchen @ 2024-11-19 18:30:53
@Wu16327
#include<iostream>
using namespace std;
const int N=1e3+10;
int t,n,m,k,x,y,d,ans,d2[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//d是方向
string s;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>t;
while(t--){
cin>>n>>m>>k>>x>>y>>d;
char map[N][N]={};
bool vis[N][N]={};
for(int i=1;i<=n;i++){
cin>>s;//用字符串输入快
int len=s.size();
for(int j=0;j<len;j++) map[i][j+1]=s[j];//存到字符数组里
}
ans=1;//起点也有一步
vis[x][y]=1;//判断走过的(可能有重复的)
while(k--){
int nx=d2[d][0]+x,ny=d2[d][1]+y;//现在的x,y坐标
if(nx>0&&nx<n+1&&ny>0&&ny<m+1&&map[nx][ny]!='x'){//判断可不可以走
x=nx;
y=ny;
if(!vis[nx][ny]){//加个数
vis[nx][ny]=1;
ans++;
}
}
else d=(d+1)%4;//转向
}
cout<<ans<<"\n";
}
return 0;
}