当前位置: 首页 > news >正文

UVa 439 Knight Moves

题目描述

题目要求计算国际象棋棋盘上骑士从一个方格移动到另一个方格所需的最少步数。骑士的移动方式为“日”字形(水平移动222格、垂直移动111格,或水平移动111格、垂直移动222格)。

输入格式

输入包含多行,每行两个字符串,表示起点方格和终点方格。方格由一个小写字母(a∼h\texttt{a} \sim \texttt{h}ah,表示列)和一个数字(1∼8\texttt{1} \sim \texttt{8}18,表示行)组成。输入以文件结束符(EOF\texttt{EOF}EOF)终止。

输出格式

对于每个测试用例,输出一行:

To get from xx to yy takes n knight moves.

样例

输入

e2 e4 a1 b2 b2 c3 a1 h8 a1 h7 h8 a1 b1 c3 f6 f6

输出

To get from e2 to e4 takes 2 knight moves. To get from a1 to b2 takes 4 knight moves. To get from b2 to c3 takes 2 knight moves. To get from a1 to h8 takes 6 knight moves. To get from a1 to h7 takes 5 knight moves. To get from h8 to a1 takes 6 knight moves. To get from b1 to c3 takes 1 knight moves. To get from f6 to f6 takes 0 knight moves.

题目分析

本题的核心是在8×88 \times 88×8的棋盘上,使用广度优先搜索(BFS\texttt{BFS}BFS)计算从起点到终点的最短路径长度。由于棋盘规模固定且较小,BFS\texttt{BFS}BFS可以高效地找到最少步数。

坐标转换

将棋盘坐标转换为000777的整数索引:

  • 行:字符1∼8\texttt{1} \sim \texttt{8}18转换为0∼70 \sim 707(或777000,不影响结果)。
  • 列:字符a∼h\texttt{a} \sim \texttt{h}ah转换为0∼70 \sim 707

骑士移动

骑士的888个可能移动方向为:
(±2,±1),(±1,±2) (\pm 2, \pm 1), (\pm 1, \pm 2)(±2,±1),(±1,±2)

广度优先搜索

从起点开始,使用队列进行BFS\texttt{BFS}BFS

  • 初始化距离数组dist[8][8]\textit{dist}[8][8]dist[8][8]−1-11dist[startRow][startCol]=0\textit{dist}[\textit{startRow}][\textit{startCol}] = 0dist[startRow][startCol]=0
  • 将起点入队。
  • 当队列非空时,取出队首节点,遍历888个邻接位置,若未访问且不越界,则设置距离为当前距离+1+1+1,并加入队列。
  • 搜索结束后,dist[endRow][endCol]\textit{dist}[\textit{endRow}][\textit{endCol}]dist[endRow][endCol]即为最少步数。

边界情况

起点等于终点时,步数为000

复杂度分析

BFS\texttt{BFS}BFS遍历整个棋盘最多646464个节点,每条边检查888个方向,时间复杂度O(64×8)=O(1)O(64 \times 8) = O(1)O(64×8)=O(1)。每组测试用例独立运行,完全可接受。

代码实现

// Knight Moves// UVa ID: 439// Verdict: Accepted// Submission Date: 2016-07-13// UVa Run Time: 0.010s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;structstate{introw,column;};intoffset[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{2,1},{2,-1},{1,2},{1,-2}};intmain(intargc,char*argv[]){ios::sync_with_stdio(false);string from,to;while(cin>>from>>to){intstart_row=from.back()-'1',start_column=from.front()-'a';intend_row=to.back()-'1',end_column=to.front()-'a';intvisited[8][8]={},moves[8][8]={};queue<state>unvisited;unvisited.push((state){start_row,start_column});visited[start_row][start_column]=1;moves[start_row][start_column]=0;while(!unvisited.empty()){state current=unvisited.front();unvisited.pop();for(inti=0;i<8;i++){intnext_row=current.row+offset[i][0],next_column=current.column+offset[i][1];if(next_row>=0&&next_row<8&&next_column>=0&&next_column<8&&visited[next_row][next_column]==false){moves[next_row][next_column]=moves[current.row][current.column]+1;unvisited.push((state){next_row,next_column});visited[next_row][next_column]=1;}}}cout<<"To get from "<<from<<" to "<<to<<" takes "<<moves[end_row][end_column]<<" knight moves."<<endl;}return0;}
http://www.rkmt.cn/news/1493111.html

相关文章:

  • Llama-3.3:多语言大模型的语系感知与锚点词约束原理
  • Kronos金融大模型:重新定义量化投资的AI语言
  • 济南新手小白手表回收全流程指南:六大平台实操,添价收标准化服务领先一步 - 薛定谔的梨花猫
  • 别再为Qt5.12安装发愁了!Win10下保姆级图文指南,从下载到配置一次搞定
  • 免费AI数字人终极指南:如何在30分钟内本地部署你的专属数字分身
  • 如何3步解决Windows运行库问题:智能管理工具的终极指南
  • 数据科学需要多少编程?按岗位拆解实用编程能力阈值
  • wiliwili:5步打造你的Switch终极B站观影中心
  • 飞思卡尔LP1071:嵌入式Wi-Fi SoC的超低功耗与高度集成设计解析
  • 如何用Chemcrow计算分子相似性:Tanimoto系数与SMILES字符串处理实战
  • MiUnlockTool常见问题FAQ:解决网络、权限、设备连接等问题
  • 2026 年张掖厨卫屋面地下室漏水测评|吉修匠 99.8 分五星榜首 - 吉修匠
  • Linux下Python实现的TCP异常流量实时拦截工具,自动封禁扫描和SYN Flood源IP
  • THULAC:揭秘清华大学高效中文词法分析工具包的核心优势与技术突破
  • Ti60F225 FPGA双目实时拼接方案:MT9M001灰度采集+硬件ORB匹配+1280x720 HDMI直出
  • 追求卓越:高质量代码的道与术
  • 2026 京东 618 数码家电购机攻略 2026京东苹果618大额优惠券领取入口最佳入手 - 资讯焦点
  • TurboPFor核心算法解析:为什么它比传统压缩快20倍?
  • 大模型技术解决方案:企业智能化转型的终极引擎!
  • PyGTrie vs 传统字典:为什么前缀树能提升你的Python程序性能?
  • 绝地求生压枪宏3步快速配置指南:告别后坐力困扰的实用方案
  • 实测对比|2026年靠谱AI论文写作工具榜单,高质初稿轻松写
  • 如何在5分钟内快速上手Zerolang:AI代理编程入门教程
  • 终极解决方案:一键修复Windows软件运行问题的Visual C++运行库全家桶
  • 别再被‘光追’搞晕了!从游戏RTX到电影渲染,一文看懂光线投射、路径追踪到底有啥区别
  • 如何用智能象棋AI连线工具VinXiangQi提升你的棋艺?3个核心功能深度解析
  • i.MX 8XLite接口时序解析:从RGMII、FlexSPI到ADC的硬件设计实战
  • NXP KMA310/A可编程角度传感器:OWI接口协议与寄存器配置实战详解
  • drive-db 项目教训:5个关键点教你如何管理API依赖与开源库生命周期
  • Blue Hydra与Ubertooth实战:如何检测隐藏的蓝牙设备