骑士巡游
不清楚为什么跟样例方案不同…玄学
等代码能力up后写下A*版本吧
#include<bits/stdc++.h>
using namespace std;
template <typename T> void read(T &x){
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';
x*=f;
}
int n;
int maz[21][21];
int dx[8]={-2,-1,-2,1,2,2,1,-1};
int dy[8]={-1,2,1,2,1,-1,-2,-2};
bool vis[21][21];
bool flag=0;
void dfs(int x,int y,int now){
if(flag==1) return;
if(now==n*n+1){
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j) cout<<maz[i][j]<<" ";
cout<<endl;
flag=1;
}
}
for(int i=0;i<8;++i){
int nx=x+dx[i],ny=y+dy[i];
if(!vis[nx][ny]&&nx>=1&&nx<=n&&ny>=1&&ny<=n){
maz[nx][ny]=now;
vis[nx][ny]=1;
dfs(nx,ny,now+1);
maz[nx][ny]=0;
vis[nx][ny]=0;
}
}
}
int main(){
read(n);
memset(maz,0,sizeof(maz));
memset(vis,0,sizeof(vis));
maz[1][1]=1;
vis[1][1]=1;
dfs(1,1,2);
if(!flag) cout<<-1<<endl;
return 0;
}