题目大意:
找一条能够让骑士遍历棋盘上所有点的路径,若有多条路径,则找出按字母表排序最小的那个解。骑士可以在任何一块方块上开始或结束他的旅行
输入:第一行为n,表示案例数
第一行至第n+1行,每行两个整数p,q
q代表棋盘上每一列依次为第1....q个字母(从A开始),p代表字母编号,也即棋盘的行数,比如p=1,q=3,则棋盘为一行三列,依次为A1,B1,C1
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=30;
int p,q;//棋盘参数
bool visit[MAXN][MAXN];//标记矩阵
int direction[8][2]={
{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1},{2,1},{-1,2},{1,2}};
bool DFS(int x,int y,int step,string ans){
if(step==p*q){ //搜索成功
cout<<ans<<endl<<endl;
return true;
} else{
for(int i=0;i<8;i++){ //遍历邻居节点
int nx=x+direction[i][0]; //扩展状态坐标
int ny=y+direction[i][1];
char col=ny+'A'; //该点编号
char row=nx+'1';