题意:已知马走日,可以走八个方向,现用 · 表示可走的路,# 表示到达的点。
给出马的一个初始位置,请输出马在三步内可以到达的点(图来表示)。
思路:dfs暴力搜索即可。注意: # 不要返回,因为走三步时可能经过这个点。
using namespace std;
const ll maxn = 1e2 + 5;
//ll a[maxn],b[maxn];
bool vis[maxn];
int ans[maxn];
vector<int>v[maxn];
int n, m;
char a[maxn][maxn];
int dir[8][2]={-2,1,-2,-1,2,1,2,-1,1,2,1,-2,-1,2,-1,-2};
void dfs(int x,int y,int step)
{
int tx,ty;
for(int i=0;i<8;i++)
{
tx=x+dir[i][0];
ty=y+dir[i][1];
if(tx>=n||tx<0||ty>=m||ty<0||step==3)
continue; ;
a[tx][ty]='#';
dfs(tx,ty,step+1);
}
return ;
}
int main()
{
int x,y;
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
a[i][j]='.';
cin>>x>>y;
a[x][y]='#';
dfs(x-1,y-1,0);
for(int i=0;i<n;i++)
printf("%s\n",a[i]);
return 0;
}