#include <bits/stdc++.h>
using namespace std;
int m;
int n;
bool flag[128][128];
int tx[128];
int ty[128];
void dfs(int i,int j,int step){
if(step==m*n&&i==0&&j==0){
for(int k=0;k<m*n;k++){
cout<<"("<<tx[k]<<","<<ty[k]<<")";
}
cout<<endl;
return;
}
if(i-1>=0&&j-2>=0&&flag[i-1][j-2]==false){
flag[i-1][j-2]=true;
tx[step]=i-1;
ty[step]=j-2;
dfs(i-1,j-2,step+1);
flag[i-1][j-2]=false;
}
if(i-2>=0&&j-1>=0&&flag[i-2][j-1]==false){
flag[i-2][j-1]=true;
tx[step]=i-2;
ty[step]=j-1;
dfs(i-2,j-1,step+1);
flag[i-2][j-1]=false;
}
if(i-2>=0&&j+1<=n-1&&flag[i-2][j+1]==false){
flag[i-2][j+1]=true;
tx[step]=i-2;
ty[step]=j+1;
dfs(i-2,j+1,step+1);
flag[i-2][j+1]=false;
}
if(i-1>=0&&j+2<=n-1&&flag[i-1][j+2]==false){
flag[i-1][j+2]=true;
tx[step]=i-1;
ty[step]=j+2;
dfs(i-1,j+2,step+1);
flag[i-1][j+2]=false;
}
if(i+1<=m-1&&j-2>=0&&flag[i+1][j-2]==false){
flag[i+1][j-2]=true;
tx[step]=i+1;
ty[step]=j-2;
dfs(i+1,j-2,step+1);
flag[i+1][j-2]=false;
}
if(i+2<=m-1&&j-1>=0&&flag[i+2][j-1]==false){
flag[i+2][j-1]=true;
tx[step]=i+2;
ty[step]=j-1;
dfs(i+2,j-1,step+1);
flag[i+2][j-1]=false;
}
if(i+2<=m-1&&j+1<=n-1&&flag[i+2][j+1]==false){
flag[i+2][j+1]=true;
tx[step]=i+2;
ty[step]=j+1;
dfs(i+2,j+1,step+1);
flag[i+2][j+1]=false;
}
if(i+1<=m-1&&j+2<=n-1&&flag[i+1][j+2]==false){
flag[i+1][j+2]=true;
tx[step]=i+1;
ty[step]=j+2;
dfs(i+1,j+2,step+1);
flag[i+1][j+2]=false;
}
}
int main(){
cin>>m>>n;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
flag[i][j]=false;
}
}
dfs(0,0,0);
}
马的Hamilton周游路线问题(DFS,但是很耗时)
于 2024-03-25 19:37:13 首次发布