搜索 B - 跳马问题(dfs)

C语言程序设计-跳马问题 引言: 课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深。使我对抽象的理论有了具体的认识。通过这次课程设计,我掌握了C语言的自行调试和变成;熟悉了c语言;了解了更好的算法;以及如何提高程序的性能等等,掌握了优化的方法和技术,通过查询资料,也了解了跳马寻找路径最短的原理。 关于跳马寻找最短路径的变成题,是立足于广搜与深搜,以及数据结构中的队列基础上编程出来的程序,它可以帮助人们找到更短的路径。 阅读详情

Description

Background
The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey
around the world. Whenever a knight moves, it is two squares in one direction and one square perpendicular to this. The world of a knight is the chessboard he is living on. Our knight lives on a chessboard that has a smaller area than a regular 8 * 8 board, but it is still rectangular. Can you help this adventurous knight to make travel plans?

Problem
Find a path such that the knight visits every square once. The knight can start and end on any square of the board.

Input

The input begins with a positive integer n in the first line. The following lines contain n test cases. Each test case consists of a single line with two positive integers p and q, such that 1 <= p * q <= 26. This represents a p * q chessboard, where p describes how many different square numbers 1, . . . , p exist, q describes how many different square letters exist. These are the first q letters of the Latin alphabet: A, . . .

Output

The output for every scenario begins with a line containing "Scenario #i:", where i is the number of the scenario starting at 1. Then print a single line containing the lexicographically first path that visits all squares of the chessboard with knight moves followed by an empty line. The path should be given on a single line by concatenating the names of the visited squares. Each square name consists of a capital letter followed by a number.
If no such path exist, you should output impossible on a single line.

Sample Input

3
1 1
2 3
4 3

Sample Output

Scenario #1:A1Scenario #2:impossibleScenario #3:A1B3C1A2B4C2A3B1C3A4B2C4

题意:这个马的遍历方式是 f[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}} 八个方向,如果全能遍历,那么找出按字典序排列最小的序列。

如果要保证按字典序排列最小那就从头开始 深搜 。


#if 0
#include<iostream>
#include<cstring>
using namespace std;
#define max 30
int ax[max],ay[max],q,p;
bool vis[max][max],flag;
int f[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};//方向

int judge(int x,int y)                                             //判断有没有越界
{
 if(x>=0 && x<q && y>=0 && y<p && vis[q][p]==0)
  return 1;
  else
  return 0;
 
}

void dfs(int a,int b,int t)             //a是x b是y t是遍历的个数
{
 	ax[t]=a;
 	ay[t]=b;
 	vis[a][b]=1;
 	
 	if(t==p*q-1)                 //如果全都访问一遍了 那就返回
 	{
 	   flag=1;                      //标记
       return ;
	} 
 for(int i=0; i<8; i++) 
{
	int dx=ax[t]+f[i][0];      //
	int dy=ay[t]+f[i][1];
	
	if(judge(dx,dy) && !vis[dx][dy])
	{
	  vis[dx][dy]=1;    
	  dfs(dx,dy,t+1);
	  if(flag)                   
	  return ;
	  vis[dx][dy]=0; //回溯
	}
}
 return ;
}

int main()
{
int n,ans=1;
cin>>n;

while(n--)
{
 flag=0;
 memset(vis,false,sizeof(vis));          //每一次都要初始化
 memset(ax,0,sizeof(ax));
 memset(ay,0,sizeof(ay));

    cin>>p>>q;
 	cout<<"Scenario #"<<ans<<":"<<endl;
    ans++;
 
  for(int i=0; i<q; i++)
  { 
  	 for(int j=0; j<p; j++)
  {
  	dfs(i,j,0);
  	if(flag) 
  	break;	
  }
  if(flag)
  break;
  }
  
  if(flag)
  {  
  for(int i=0; i<q*p; i++) 
  cout<<char(ax[i]+'A')<<ay[i]+1; 
  cout<<endl<<endl;
  }
  else 
  cout<<"impossible"<<endl<<endl;
 
 	
}	
 	
} 
#endif 







c/c++解决跳马问题 c/c++语言解决跳马问题,广度优先搜索,算法设计与分析 立即下载

相关推荐

STM32CubeIDE串口打印浮点数踩坑实录:5分钟搞定printf输出小数(附完整配置截图)

本文针对STM32CubeIDE中串口无法打印浮点数的常见问题,提供了详细的解决方案。核心在于通过添加“-u _printf_float”链接器参数,启用标准库的浮点数格式化支持。文章附有完整的配置截图和步骤,并提供了系统性的排查清单,帮助开发者快速解决printf输出小数的问题。

weixin_29163797的博客 343

HDU 2488 A Knight's Journey(深搜)

A Knight's Journey Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27258   Accepted: 9295 Description Background  The knight is getting bored of seeing the

LYHVOYAGE的专栏 8928

Materials Studio与LAMMPS联合作战:如何用msi2lmp.exe完美转换聚合物模型(含PCFF力场配置)

本文详细解析了如何利用msi2lmp.exe工具将Materials Studio中的聚合物模型高效、准确地转换为LAMMPS可识别的data文件,并重点配置PCFF力场。文章提供了从MS模型构建、文件导出到命令行转换、参数调整及转换后验证的全流程实战指南与避坑技巧,旨在帮助研究者解决模型转换中的常见问题,实现跨平台分子动力学模拟的无缝衔接。

weixin_29228781的博客 520

kuangbin 简单搜索 B

B - Dungeon MasterYou are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one

wtml 502

基于LightGBM和多模型融合的量化交易研究:沪深300为例【附代码】

📊 数据科学与大数据专业 | 数据分析与模型构建 | 数据驱动决策✨ 专业领域:数据挖掘与清洗大数据处理与存储技术机器学习与深度学习模型数据可视化与报告生成分布式计算与云计算数据安全与隐私保护💡 擅长工具:Python/R/Matlab 数据分析与建模Hadoop/Spark 大数据处理平台SQL数据库管理与优化Tableau/Power BI 数据可视化工具TensorFlow/PyTorch 深度学习框架✅数据科学与大数据技术毕业论文【数据】

lagougongzuoshi的博客 1670

Springer期刊LaTeX模板中参考文献格式选择与编译错误的快速修复指南

本文针对Springer期刊LaTeX模板中参考文献编译后显示问号的常见问题,提供了快速修复指南。核心在于正确选择并配置与期刊匹配的参考文献格式文件(.bst),并执行标准的四步编译流程。文章详细解释了问题根源,并给出了从查找正确.bst文件到修改代码、执行编译的完整解决方案,帮助作者高效解决投稿中的技术障碍。

weixin_29266007的博客 402

搜索 B

Description Background The knight is getting bored of seeing the same black and white squares again and again and has decided to make a journey around the world. Whenever a knight moves, it is

ACM_yys的博客 920

PSCAD学习笔记(1)Project Settings(重点snapshot设置)

若不勾选,则横坐标为实际时间2-7s,故障显示在第3s发生。图片中时间坐标轴显示为0-5s,故障时刻显示为第1s,即0-1s展示系统稳态,1-5s展示系统发生故障后的暂态响应,如何通过快照文件实现?勾选该项后,使用快照文件启动仿真会将仿真起始时间强制设置为0s,反之不勾选则依据快照文件保存的时间轴继续(即坐标为实际时间)。如果已有的快照文件保存的是0s至5s的仿真内容,则仿真运行时间从5s开始,到10s结束。如果已有的快照文件保存的是0s至2s的仿真内容,则仿真运行时间从2s开始,到7s结束;

gwenh的博客 7344

HDU1372 跳马问题 BFS

Knight MovesTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1147    Accepted Submission(s): 721Problem DescriptionA fr

ACM_DavidCN的专栏 2460

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用RFAConv感受野注意力卷积改进YOLO26检测头,RFAHead感受野注意力检测头,助力小目标检测高效涨点

YOLO26作为轻量化目标检测模型的新一代标杆,凭借高效的Backbone与Neck结构,在实时检测场景中表现突出,但原生检测头仍存在核心痛点——感受野固定、小目标特征感知薄弱、多尺度目标适配不足,导致在小目标密集、复杂背景遮挡等场景中漏检率偏高、定位精度不足。

qq_36130719的博客 168

手把手教你双目测距理论及生成视差图,深度图,点云图像

Stereo Vision, 也叫双目立体视觉,它的研究可以帮助我们更好的理解人类的双眼是如何进行深度感知的。双目视觉在许多领域得到了应用,例如城市三维重建、3D模型构建(如kinect fusion)、视角合成、3D跟踪、机器人导航(自动驾驶)、人类运动捕捉(Microsoft Kinect)等等。双目测距也属于双目立体视觉的一个应用领域,双目测距的基本原理主要是三角测量原理,即通过视差来判定物体的远近。

qq_53545309的博客 2280

A Knight's Journey

A - A Knight's Journey Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2488 Description Background  The knight is getting bor

CSUST_ACM的专栏 862

【异常】XXL-job触发调度:address:http://192.168.x.x:x/ code:500 msg:xxl-rpc remoting error(connect timed out)

XXL-JOB调度任务失败分析:调度中心(10.254.234.80)与执行器(192.168.x.x)连接超时,返回500错误。主要原因是网络不通或执行器异常:1.网络不通可能由防火墙或网段隔离导致;2.执行器未启动或端口未监听;3.地址配置错误。解决方案:1.关闭代理使用内网;2.测试网络连通性和端口可用性;3.检查执行器进程状态和端口监听情况;4.核对执行器地址配置;5.必要时配置防火墙规则放行端口。

奶爸的编程之路,也就一周冷个三天 414

蓝桥杯——python跳马

跳马(跳马规则,以及状态标记)

m0_74928654的博客 212

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

搜索(1):深度优先搜索

今天主要来了解深度优先搜索(DFS)。

pancodearea的博客 2486

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

搜索(DFS入门+剪枝入门)

本文介绍了DFS(深度优先搜索)的基本概念和典型题目。DFS的核心是"不撞墙不回头"的遍历方式,通过递归实现系统栈调用。文章讲解了迷宫问题、跳马问题和八皇后问题等基础DFS应用,重点分析了坐标偏移量处理、递归终止条件和回溯恢复现场等关键技巧。在剪枝专题部分,以小猫爬山问题为例,说明了最优性剪枝和搜索顺序优化两种剪枝方法。通过多个经典题目和完整代码示例,帮助读者掌握DFS的基本实现方法和优化策略。

weixin_44319729的博客 1363

【搜索算法】 跳马问题(C/C++)

一个8×8的棋盘上有一个马初始位置为(a,b),他想跳到(c,d),问是否可以?如果可以,最少要跳几步?本人小白一枚,能力有限,希望各位大佬理解。本文有错误的地方请指出,共同进步,如果跳不到,输出-1;否则输出最少跳到的步数。0

闻道有先后,术业有专攻 748

跳马问题

跳马问题 洛谷P1644 // // main.cpp // 跳马 // // Created by Helen on 2020/2/17. // Copyright © 2020 Helen. All rights reserved. // #include <iostream> using namespace st int n,m,ans=0; int jump[19...

ThisIsHelen的博客 494

有趣的跳马问题与最优路径

A* 算法用总代价 f(x) = g(x) + h(x) 作为节点的扩展优先级,其中 g(x) 为起点到 x 的实际代价,h(x) 为 x 到目标节点的预估代价,h(x)

TCP/IP 2万+

打卡信奥刷题(199)用C++工具信奥P1644[普及组/提高] 跳马问题

在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧……

Loge谈信奥--一个专注于信奥人的博客 1960

【搜索算法】DFS与BFS(深度优先搜索与广度优先搜索)

DFS与BFS

ultrarefrain的博客 816

【python】【图解】BFS和DFS的区别(双向BFS)

什么是BFS BFS中文名称宽度优先搜索算法(又称广度优先搜索),是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型。Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想。其别名又叫BFS,属于一种盲目搜寻法,目的是系统地展开并检查图中的所有节点,以找寻结果。换句话说,它并不考虑结果的可能位置,彻底地搜索整张图,直到找到结果为止。 什么是DFS 深度优先搜索是一种在开发爬虫早期使用较多的方法。它的目的是要达到被搜索结构的叶结点(即那些不包含任何超链的HTML

LRY___的博客 918

dfs跳马问题

跳马 问题描述】 有一只中国象棋中的 ” 马 ” ,在半张棋盘的左上角出发,向右下角跳去。规定只许向右跳(可上,可下, 但不允许向左跳)。请编程求从起点 A(1,1) 到终点 B(m,n) 共有多少种不同跳法。 【输入格式】 输入文件只有一行,两个整数m和n(1&lt;=m,n&lt;=20),两个数之间有一个空格。 【输出格式】 输出文件只有一个整数,即从 A 到 B 全部的...

print_lzp的博客 1250

P1644 跳马问题 题解

P1644 跳马问题 题解

缪语博的博客 327

【C++算法】深度优先搜索详解,入下回离,附带三道例题详细注释

深搜是通过系统栈实现的,递归调用的过程,系统自动通过栈去维护函数的状态空间,系统栈记录函数返回地址、局部变量、参数传递等,向下走,是压栈的过程;向上走,是出栈的过程

qq_63586399的博客 1087
上一篇: 搜索-O - 切绳子问题(二分)
下一篇: 数学1(n^n)Leftmost Digit
Joined
博客等级 码龄10年 19粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值