P1189,萌新求优化思路
查看原帖
P1189,萌新求优化思路
485688
想吃小熊饼干楼主2021/8/3 14:57

rt,知道代码会TLE,但是不知道怎么优化.代码:

#include<bits/stdc++.h>
using namespace std;
char m[60][60];int r,c,n,d[1010];
void dfs(int x,int y,int cnt)
{
    if(cnt==n)
    {
        if(m[x][y]!='X')m[x][y]='*';
    }
    if(d[cnt]==1&&x-1>=0&&m[x-1][y]!='X')dfs(x-1,y,cnt);
    if(d[cnt+1]==1&&x-1>=0&&m[x-1][y]!='X')dfs(x-1,y,cnt+1);
    if(d[cnt]==2&&y+1<c&&m[x][y+1]!='X')dfs(x,y+1,cnt);
    if(d[cnt+1]==2&&y+1<c&&m[x][y+1]!='X')dfs(x,y+1,cnt+1);
    if(d[cnt]==3&&x+1<r&&m[x+1][y]!='X')dfs(x+1,y,cnt);
    if(d[cnt+1]==3&&x+1<r&&m[x+1][y]!='X')dfs(x+1,y,cnt+1);
    if(d[cnt]==4&&y-1>=0&&m[x][y-1]!='X')dfs(x,y-1,cnt);
    if(d[cnt+1]==4&&y-1>=0&&m[x][y-1]!='X')dfs(x,y-1,cnt+1);
    return;
}
int main()
{
    int x,y;
    scanf("%d%d",&r,&c);
    for(int i=0;i<r;i++)
    {
    	string s;s.resize(1000);
    	scanf("%s",s.c_str());
    	for(int j=0;j<c;j++)
    	{
    		m[i][j]=s[j];
    		if(s[j]=='*')
    		{x=i;y=j;m[i][j]='.';}
		}
	}
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        string s;s.resize(5);scanf("%s",s.c_str());
        if(s>="EAST")d[i]=2;
        if(s>="NORTH")d[i]=1;
        if(s>="SORTH")d[i]=3;
        if(s>="WEST")d[i]=4;
    }
    dfs(x,y,1);
    for(int i=0;i<r;i++)printf("%s\n",m[i]);
    return 0;
}
2021/8/3 14:57
加载中...