提交时间:2024-08-21 16:21:37

运行 ID: 180588

#include<bits/stdc++.h> using namespace std; int n; int a[20][20]; int dx[8]={-2,-2,-1,1,2,2,1,-1}; int dy[8]={-1,1,2,2,1,-1,-2,-2}; int flag=0; void dfs(int x,int y,int num) { int x1,y1; if(num==n*n)//递归出口 { flag=1; return; } for(int i=0;i<8;i++)//搜索过程 { x1=x+dx[i];//棋子的下一个坐标 y1=y+dy[i]; if(x1>0&&x1<=n&&y1>0&&y1<=n&&!a[x1][y1])//判断是否出界或此位置已经走过 { num=num+1; a[x1][y1]=num; dfs(x1,y1,num); num=num-1; if(flag) return; a[x1][y1]=0; } x1=x+dx[i]; y1=y+dy[i]; // for(int i=0;i<n;i++) // { // for(int j=0;j<n;j++) // { // cout<<a[i][j]; // } // cout<<endl; // } // cout<<"__________________________"<<endl; } } int main() { int x,y; cin>>n>>x>>y; a[x-1][y-1]=1; // for(int i=0;i<n;i++) // { // for(int j=0;j<n;j++) // { // cout<<a[i][j]; // } // cout<<endl; // } // cout<<"__________________________"<<endl; dfs(x,y,1);//开始搜索 // for(int i=0;i<n;i++) // { // for(int j=0;j<n;j++) // { // cout<<a[i][j]; // } // cout<<endl; // } // cout<<"__________________________"; for(int i=0;i<n;i++)//判断是否有解 { for(int j=0;j<n;j++) { if(a[i][j]==0) return 0;//如果无解直接结束 } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cout<<a[i][j];//输出结果 } } }