这是我的Jumping on Walls代码,我一直以为这样子写就是bfs,但是我的同学看完我的代码后却认定这是dfs。
#include<bits/stdc++.h>
using namespace std;
int n,k;
long long b[5][300005];
char a[5][200005];
struct zb
{
int a,b;
};
queue<zb> q;
void bfs(int x,int y,int j)
{
a[x][y]='X';
if(a[x][y+1]=='-'&&y+1>b[x][y]+1&&y+1<=n+k)
{
b[x][y+1]=b[x][y]+1;
a[x][y+1]='X';
q.push(zb{x,y+1});
}
if(x==1&&a[2][y+k]=='-'&&y+k>b[x][y]+1&&y+k<=n+k)
{
b[2][y+k]=b[x][y]+1;
a[2][y+k]='X';
q.push(zb{2,y+k});
}
if(x==2&&a[1][y+k]=='-'&&y+k>b[x][y]+1&&y+k<=n+k)
{
b[1][y+k]=b[x][y]+1;
a[1][y+k]='X';
q.push(zb{1,y+k});
}
if(a[x][y-1]=='-'&&y-1>b[x][y]+1&&y-1<=n+k&&y-1>0)
{
b[x][y-1]=b[x][y]+1;
a[x][y-1]='X';
q.push(zb{x,y-1});
}
while(!q.empty())
{
int x2=q.front().a;
int y2=q.front().b;
q.pop();
bfs(x2,y2,b[x2][y2]);
}
}
int main()
{
cin>>n>>k;
for(int i=1;i<=2;i++)
{
for(int ii=1;ii<=n;ii++)
{
cin>>a[i][ii];
}
}
for(int i=1;i<=2;i++)
{
for(int ii=n+1;ii<=n+k;ii++)
{
a[i][ii]='-';
}
}
bfs(1,1,0);
for(int i=1;i<=2;i++)
{
for(int ii=n+1;ii<=n+k;ii++)
{
if(b[i][ii]>0)
{
cout<<"YES";
return 0;
}
}
}
cout<<"NO";
return 0;
}