dfs求助
查看原帖
dfs求助
550471
Ice_function楼主2022/6/29 13:04

rt,我竟然不会dfs了

#include <bits/stdc++.h>
using namespace std;

const int N=1e2+3;

int T,n,k;

int a[N][N],vi[N][N],dx[]={3,3,3},dy[]={-1,0,1};

inline int read()
{
    int X=0; bool flag=1; char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') flag=0; ch=getchar();}
	while(ch>='0'&&ch<='9') {X=(X<<1)+(X<<3)+ch-'0'; ch=getchar();}
    if (flag) return X;return ~(X-1);
}

bool dfs(int x,int y)
{
	for (int e=0;e<=2;e++)
	{
		int kx=x+dx[e],ky=y+dy[e];
		if (ky<1 || ky>3) continue;
		if (a[kx-2][ky]==1 || a[kx-1][ky]==1 || a[kx][ky]==1 || a[x+1][y]==1) continue;
		if (vi[kx][ky]) continue;
		vi[kx][ky]=1;
		if (kx>n || dfs(kx,ky)) return 1;
	}
	return 0;
}

signed main()
{
	T=read();
	
	
	while (T--)
	{
		n=read(),k=read();
		
		int x,y;
		for (int j=1;j<=3;j++)
		{
			string temp;
			cin>>temp;
			for (int i=1;i<=n;i++)
			{
				if (temp[i-1]!='.' && temp[i-1]!='s') [i][j]=1;
				if (temp[i-1]=='s') x=i,y=j,a[j][i]=0;
				if (temp[i-1]=='.') a[i][j]=0;
			}	
		}
		if (dfs(x,y)) cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
		memset(a,0,sizeof a);
		memset(vi,0,sizeof vi);
	}
	return 0;
}

评测状态

2022/6/29 13:04
加载中...