厌氧程序
  • 板块P1189 SEARCH
  • 楼主w9095
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/10/10 11:10
  • 上次更新2023/10/27 08:01:07
查看原帖
厌氧程序
569235
w9095楼主2022/10/10 11:10
#include <bits/stdc++.h>
using namespace std;
int n,m,k,x,y;
int f[200][200][200];
char map1[60][60];
char ch,str[1000];
int dir[3000],cnt=1;
int x1[4]={-1,1,0,0};
int y2[4]={0,0,-1,1};
int dfs(int x,int y,int di)
{
	if(di==k+1){map1[x][y]='*';return 0;}
	if(f[x][y][di])return 0;
	for(int i=1;;i++)
	    {
	    	if(!(x+x1[dir[di]]*i<n&&x+x1[dir[di]]*i>=0&&y+y2[dir[di]]*i<m&&y+y2[dir[di]]*i>=0))break;
	    	if(map1[x+x1[dir[di]]*i][y+y2[dir[di]]*i]=='X')break;
	    	dfs(x+x1[dir[di]]*i,y+y2[dir[di]]*i,di+1);
	    	f[x][y][di]=1;
		}
}

int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++)
        {
        for(int j=0;j<m;j++)
            {
            while(!(ch=='.'||ch=='X'||ch=='*'))ch=getchar();
            if(ch=='*'){x=i;y=j;}
            map1[i][j]=ch;
            ch='\0';
            }
        }
    scanf("%d",&k);
    for(int i=0;i<k;i++)
        {
        	scanf("%s",str);
        	switch(str[0])
        	      {
        	      	case 'N':dir[cnt++]=0;break;
        	      	case 'S':dir[cnt++]=1;break;
        	      	case 'W':dir[cnt++]=2;break;
        	      	case 'E':dir[cnt++]=3;break;
				  }
		}
	map1[x][y]='.';
	dfs(x,y,1);
	for(int i=0;i<n;i++)
	    {
	    	for(int j=0;j<m;j++)
	    	    printf("%c",map1[i][j]);
	    	printf("\n");
		}
	return 0;
}

不开O2

开了O2

话说这是什么情况啊.....

2022/10/10 11:10
加载中...