王道复试C语言 第八章搜索(下:深度优先搜索DFS)——代码笔记分享

文章介绍了使用深度优先搜索(DFS)算法解决两个问题:一是骑士在棋盘上能否遍历所有格子,二是给定棍子长度能否组成正方形。对于骑士走日问题,通过递归实现DFS,判断是否存在可行路径;对于正方形构建,通过DFS检查棍子组合的可能性。

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

搜索

深度优先搜索 DFS

采用递归实现,需要辅助数组,记录路径时需要用数组或栈
在这里插入图片描述

9.3A Knight’s Journey

用深度优先算法DFS判断是否有解的问题。
在这里插入图片描述

北大OJ

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
using namespace std;
/*
题目:
骑士走日(即一步可以向斜上下左右两格方向移动,共8个方向),
棋盘纵轴顺序为A,B,C...,横轴顺序为1,2,3...,
在棋盘中找到一条可以遍历棋盘每一个格子的路径。
输入:
第一行输入n,代表有n种棋盘,
往后n行每行输入p和q(1 <= p*q <= 26),代表横向有p块,纵向有q块。
输出:
每个输出以"Scenario #i"开头,
再输出一个路径即走过的格子集合,需按字典顺序输出,
没有路径则输出"impossible"。
*/

int direction[8][2] = {
   //8个方向
	//按字典顺序输出,则先让y值减小,再让x值减小
	{
   -1,-2},{
   1,-2},{
   -2,-1},{
   2,-1},{
   -2,1},{
   2,1},{
   -1,2},{
   1,2}
};
bool isvisit[50][50];
bool DFS(int x, int y, int cur, int p, int q, string path) {
   
	//x当前格子横轴,y当前格子纵轴,cur当前走过的格子数,p棋盘横向数,q棋盘纵向数,path路径即走过的点集合
	//把本节点加入路径
	path += (y + 'A');//棋盘纵轴顺序为A,B,C...
	path += (x + '1')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值