使用奇怪思路的萌新求助!
  • 板块P1189 SEARCH
  • 楼主鹿目圆
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/3/2 17:41
  • 上次更新2023/10/28 07:26:14
查看原帖
使用奇怪思路的萌新求助!
230857
鹿目圆楼主2022/3/2 17:41
#include<bits/stdc++.h>
using namespace std;
const int maxn=1145;
int mapp[60][60],vis[maxn][60][60];
int r,c,n;
int sx,sy;
int tox[4]={-1,1,0,0};
int toy[4]={0,0,1,-1};
int to[maxn];
bool flag;
bool check(int x,int y)
{
	if(mapp[x][y]==0)
	return 0;
	return 1;
}
void sett(int x,int y,int fro)
{
	if(!check(x,y))
	{
		return ;
	}
	mapp[x][y]=3;
	int xx=x+tox[fro],yy=y+toy[fro];
	sett(xx,yy,fro);
 } 
void dfs(int dep,int x,int y,int fro)//dep为深度,xy为坐标,fro为上一次走的方向 
{
	if(vis[dep][x][y]) return;
	vis[dep][x][y]=1;
	if(dep==n)//深度满足n后对一条线上的点进行操作,否则只会将满足n后第一个点进行标记 
	{
		sett(x,y,fro);
		return ;
	}
	for(int i=dep;i<=n;i++)
	{
		int xx=x+tox[to[i]],yy=y+toy[to[i]];
		if(!check(xx,yy)) continue;
		if(to[i]==fro)//如果这一次走的方向和上一次一样则深度不加否则加一 
		{
			dfs(dep,xx,yy,to[i]);
		}
		else
		{
			dfs(dep+1,xx,yy,to[i]);
		}
	}
}
int main()
{
	scanf("%d%d",&r,&c);
	string mmap;
	for(int i=1;i<=r;i++)
	{
		cin>>mmap;
		for(int j=0;j<mmap.size();j++)
		{
			if(mmap[j]=='.')
			mapp[i][j+1]=1;
			if(mmap[j]=='*')
			{
				sx=i;sy=j+1;
				mapp[i][j+1]=1;
			}	
		}
	}
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		string dir;
		cin>>dir;
		if(dir[0]=='N') to[i]=0;
		if(dir[0]=='S') to[i]=1;
		if(dir[0]=='E') to[i]=2;
		if(dir[0]=='W') to[i]=3;
	}
	dfs(1,sx,sy,to[1]);
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=c;j++)
		{
			if(mapp[i][j]==3) printf("*");
			else if(mapp[i][j]!=0) printf(".");
			else printf("X");
		}
		printf("\n");
	}
	return 0;
} 
2022/3/2 17:41
加载中...