rt.代码如下,请自己看注释。思路为dfs。提供有用纠错酌情给关
#include"bits/stdc++.h"
using namespace std;
bool m[60][60];//用于记录这个点能否通过
char state[60][60];//用于记录这个点的答案
char dir[1005];//用于记录方向的数组
int r,c,n;//r,c即题目中含义,n为方向总数
void dfs(int x,int y,int z)
{
if (z==(n+1))//方向数组走完了,dfs结束&退出
{
state[x][y]='*';
return;
}
if (dir[z]=='S')//判定方向
{
for (int i=(y-1);i>=1;i--)//从这个点开始走,所有合法的点都搜一遍
{
if (!m[x][i])//不能前进就停止搜索
{
continue;
}
dfs(x,i,(z+1));
}
return;
}
if (dir[z]=='N')
{
for (int i=(y+1);i<=r;i++)
{
if (!m[x][i])
{
continue;
}
dfs(x,i,(z+1));
}
return;
}
if (dir[z]=='E')
{
for (int i=(x+1);i<=c;i++)
{
if (!m[i][y])
{
continue;
}
dfs(i,y,(z+1));
}
return;
}
if (dir[z]=='W')
{
for (int i=(x-1);i>=1;i--)
{
if (!m[i][y])
{
continue;
}
dfs(i,y,(z+1));
}
return;
}
}
int main()
{
int startx,starty;
string s;
scanf("%d%d",&r,&c);
for (int i=1;i<=60;i++)
{
for (int j=1;j<=60;j++)
{
m[i][j]=false;//初始化,防越界
}
}
for (int i=1;i<=r;i++)
{
for (int j=1;i<=c;i++)
{
scanf("%c",&state[i][j]);//读入地图
if (state[i][j]=='.')
{
m[i][j]=true;
}
if (state[i][j]=='*')
{
m[i][j]=true;
startx=i;//确定开始位置
starty=j;
}
}
}
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
cin>>s;//方向读入,直接读入首字母
dir[i]=s[0];
}
dfs(startx,starty,1);
for (int i=1;i<=r;i++)
{
for (int j=1;j<=c;j++)
{
printf("%d",state[i][j]);//输出
}
printf("\r\n");//换行
}
return 0;
}