骑士遍历求调
  • 板块学术版
  • 楼主czx2021
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/9/19 22:28
  • 上次更新2023/10/22 18:40:52
查看原帖
骑士遍历求调
565698
czx2021楼主2023/9/19 22:28
#include<bits/stdc++.h>
using namespace std;
const int maxn=10;
int a[maxn][2],flag=0;
bool c[maxn][maxn];
int d[8][2]={{-1,2},{-1,-2},{-2,-1},{-2,1},{1,2},{1,-2},{2,-1},{2,1}};
void print(int k){
	for(int i=1;i<=k-1;i++)cout<<"("<<a[i][0]<<","<<a[i][1]<<")"<<"->";
	cout<<"("<<a[k][0]<<","<<a[k][1]<<")"<<endl;
}
int n,m,x1,y1,k=0;
void search(int x,int y){
		if(flag==n*m)print(k);
	    else{
		for(int i=0;i<8;i++){
		if(x+d[i][0]>=1&&x+d[i][0]<=n&&y+d[i][1]>=1&&y+d[i][1]<=m&&c[x+d[i][0]]
		[y+d[i][1]]){
		   k++;
		   flag++;
		   c[x+d[i][0]][y+d[i][1]]=false; 
		   a[k][0]=x+d[i][0];
		   a[k][1]=y+d[i][1];
		   search(x+d[i][0],y+d[i][1]);
		   k--;
		   flag--;
		   c[x+d[i][0]][y+d[i][1]]=true;
		   x=x-d[i][0];
		   y=y-d[i][1];
		}	
		} 
	}
}
int main(){
	cin>>n>>m>>x1>>y1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			c[i][j]=true;
		}
	}
	search(x1,y1);
	//cout<<"No Answer!";
	return 0;
}

人傻了,一直调不出来,哪位dalao帮忙解答一下点关注

2023/9/19 22:28
加载中...