dfs求调
  • 板块P1189 SEARCH
  • 楼主Swordmaker
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/3 16:55
  • 上次更新2024/12/3 20:05:14
查看原帖
dfs求调
1518144
Swordmaker楼主2024/12/3 16:55

大佬求调

#include<bits/stdc++.h>
using namespace std;
int n,m,k,sx,sy;
bool dis[1010][55][55],can[55][55];
char in[55][55],out[55][55];
char way[1001];
void dfs(int x,int y,int cnt)
{
	
	if(dis[cnt][x][y]||x<1||x>n||y<1||y>m)
	{
		return;
	}
	dis[cnt][x][y]=true;
	if(cnt==k)
	{
		out[x][y]='*';
		return;
	}
	if(way[cnt]=='E'&&in[x][y]!='X')
	{
		for(int i=1;i<=n-x;i++)
		{
			if(!can[x+i][y]) break;
			dfs(x+i,y,cnt+1);
		}
	}
	else if(way[cnt]=='W'&&in[x][y]!='X')
	{
		for(int i=1;i<x;i++)
		{
			if(!can[x-i][y]) break;
			dfs(x-i,y,cnt+1);
		}
	}
	else if(way[cnt]=='S'&&in[x][y]!='X')
	{
		for(int i=1;i<=m-y;i++)
		{
			if(!can[x][y+i]) break;
			dfs(x,y+i,cnt+1);
		}
	}
	else if(way[cnt]=='N'&&in[x][y]!='X')
	{
		for(int i=1;i<y;i++)
		{
			if(!can[x][y-i]) break;
			dfs(x,y-i,cnt+1);
		}
	}
	return;
}
int main()
{
	memset(can,false,sizeof(can));
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>in[i][j];
			out[i][j]=in[i][j];
			if(in[i][j]=='*')
			{
				sx=i;
				sy=j;
			}
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(in[i][j]=='*'||in[i][j]=='.')
			{
				can[i][j]=true;
			}
		}
	}
	cin>>k;
	for(int l=1;l<=k;l++)
	{
		string c;
		cin>>c;
		way[l]=c[0];
	}
	out[sx][sy]='.';
	dfs(sx,sy,0);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cout<<out[i][j];
		}
		cout<<"\n";
	}
    return 0;
}
2024/12/3 16:55
加载中...