dfs20pts求助
  • 板块P1189 SEARCH
  • 楼主lishengkai
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/26 16:02
  • 上次更新2024/6/26 19:46:04
查看原帖
dfs20pts求助
797763
lishengkai楼主2024/6/26 16:02
#include<bits/stdc++.h>
using namespace std;
int n,m,q,ord[1001],sx,sy,ans[2501][2],sum;//1上北2下南3左西4右东
char ch[101][101];
string s;
void dfs(int c,int x,int y)
{
	if(c==q+1)
	{
		ans[++sum][0]=x;
		ans[sum][1]=y;
		return;
	}
	if(ord[c]==0)
	{
		if(ch[x-1][y]=='X'||x==1)
			return;
		for(int i=x-1;i>=1;--i)
		{
			if(ch[i][y]=='X')
				break;
			dfs(c+1,i,y);
		}
	}
	if(ord[c]==1)
	{
		if(ch[x+1][y]=='X'||x==n)
			return;
		for(int i=x+1;i<=n;++i)
		{
			if(ch[i][y]=='X')
				break;
			dfs(c+1,i,y);
		}
	}
	if(ord[c]==2)
	{
		if(ch[x][y-1]=='X'||y==1)
			return;
		for(int i=y-1;i>=1;--i)
		{
			if(ch[x][i]=='X')
				break;
			dfs(c+1,x,i);
		}
	}
	if(ord[c]==3)
	{
		if(ch[x][y+1]=='X'||y==m)
			return;
		for(int i=y+1;i<=m;++i)
		{
			if(ch[x][i]=='X')
				break;
			dfs(c+1,x,i);
		}
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		{
			cin>>ch[i][j];
			if(ch[i][j]=='*')
			{
				sx=i;
				sy=j;
				ch[i][j]='.';
			}
		}
	cin>>q;
	for(int i=1;i<=q;++i)
	{
		cin>>s;
		if(s[0]=='N')
			ord[i]=0;
		if(s[0]=='S')
			ord[i]=1;
		if(s[0]=='W')
			ord[i]=2;
		if(s[0]=='E')
			ord[i]=3;
	}
	dfs(1,sx,sy);
	for(int i=1;i<=sum;++i)
		ch[ans[i][0]][ans[i][1]]='*';
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
			cout<<ch[i][j];
		cout<<'\n';
	}
	return 0;
}
2024/6/26 16:02
加载中...