骑士棋盘遍历问题(DFS)

该博客探讨了如何使用深度优先搜索(DFS)解决骑士在棋盘上遍历所有位置的问题。当存在多条可行路径时,目标是找到字母顺序最小的那一条。文章详细介绍了问题背景、输入格式,并提供了相关的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:

找一条能够让骑士遍历棋盘上所有点的路径,若有多条路径,则找出按字母表排序最小的那个解。骑士可以在任何一块方块上开始或结束他的旅行

输入:第一行为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';
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值