happy_banana @ 2024-11-14 20:37:36
#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,stx,sty,stf,sum;
int a[10010][10010];
bool pd[10010][10010],flag;
void dfs(int x,int y,int d,int s)
{
if(s>k) return;
if(d==0)
{
if(a[x][y+1]==1&&y+1<=m)
{
if(pd[x][y+1]==0)
{
pd[x][y+1]=1;
sum++;
}
dfs(x,y+1,d,s+1);
}
else dfs(x,y,(d+1)%4,s+1);
}
else if(d==1)
{
if(a[x+1][y]==1&&x+1<=n)
{
if(pd[x+1][y]==0)
{
pd[x+1][y]=1;
sum++;
}
dfs(x+1,y,d,s+1);
}
else dfs(x,y,(d+1)%4,s+1);
}
else if(d==2)
{
if(a[x][y-1]==1&&y-1>=0)
{
if(pd[x][y-1]==0)
{
pd[x][y-1]=1;
sum++;
}
dfs(x,y-1,d,s+1);
}
else dfs(x,y,(d+1)%4,s+1);
}
else
{
if(a[x-1][y]==1&&x-1>=0)
{
if(pd[x-1][y]==0)
{
pd[x-1][y]=1;
sum++;
}
dfs(x-1,y,d,s+1);
}
else dfs(x,y,(d+1)%4,s+1);
}
}
int main()
{
string s;
cin>>T;
for(int C=1;C<=T;C++)
{
sum=1;
memset(pd,0,sizeof(pd));
cin>>n>>m>>k;
cin>>stx>>sty>>stf;
stx--;
sty--;
for(int i=0;i<n;i++)
{
cin>>s;
for(int j=0;j<m;j++)
{
if(s[j]=='.') a[i][j]=1;
else a[i][j]=0;
}
}
pd[stx][sty]=1;
dfs(stx,sty,stf,1);
cout<<sum<<'\n';
}
return 0;
}
by mooktian @ 2024-11-15 16:28:19
@happy_banana
1.你要开一个方向数组来记录方向啊,
2.初始位置,你没有标记
加一个:
pd[stx][sty] = 1;
3.没必要用dfs啊,整的太复杂了,你这个代码。
by mooktian @ 2024-11-15 16:36:48
不好意思,看错了,你那个初始位置有标记了。
没看出哪有问题,你这个代码实在是太长了。
贴一个AC代码,仅供参考。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1010;
int t,n,m,k;
int dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0};
char a[N][N];
bool st[N][N];
int main( ) {
cin >> t;
while(t--) {
int ans = 1;
int x,y,d;
memset(st,0,sizeof st);
cin >> n >> m >> k >> x >> y >> d;
st[x][y] = 1;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
cin >> a[i][j];
while(k--) {
int nx = x + dx[d] , ny = y + dy[d];
if(nx >= 1 && nx <= n && ny >= 1 && ny <= m && a[nx][ny] != 'x') {
if(!st[nx][ny]) {
st[nx][ny] = 1;
ans ++;
}
x = nx , y = ny;
}else d = (d + 1) % 4;
}
cout << ans <<"\n";
}
return 0;
}
by wangmuze @ 2024-11-16 18:57:35
Jhaja+3920/33
by happy_banana @ 2024-11-17 08:58:28
@mooktian 感谢
by happy_banana @ 2024-11-17 08:59:10
谁能帮我看看我这个代码?
九九孩子啊