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;
}