UVA439-骑士的移动 Knight Moves(BFS)

news/2025/2/26 7:01:54

AC Code: 

#include<bits/stdc++.h>
using namespace std;
#define N 101
struct node {//定义结构体 
	int x,y,s;//分别为该点的横坐标、纵坐标、步数 
}que[N*N];
int book[N][N];//标记数组 
int dx[]={-1,-2,-2,-1,1,2,2,1};//马可以向8个方向移动 
int dy[]={2,1,-1,-2,-2,-1,1,2};
bool judge(int x,int y) {
	if(x>=1&&x<=8&&y>=1&&y<=8&&book[x][y]==0) {//不越界并且这个点没有访问过 
		return true;
	}
	return false;
}
int main() {
	int head,tail,flag,sx,sy,ex,ey,minn;
	char a[10],b[10];
	while(~scanf("%s%s",a,b)) {//每组样例为两个字符串 
		flag=0;//标记变量 
		head=tail=1;//队头队尾初始化为1 
		memset(book,0,sizeof(book));//标记数组清零 
		sx=a[0]-'a'+1;//将字符串中的每个字符转换为对应的ASCII码 
		sy=a[1]-'0';
		ex=b[0]-'a'+1;
		ey=b[1]-'0';
		if(sx==ex&&sy==ey) {//特判:如果样例输入中起点和终点一样,则直接到达 
			printf("To get from %s to %s takes 0 knight moves.\n",a,b);
		}else {
			que[head].x=sx;//起点坐标入队 
			que[head].y=sy;
			que[head].s=0;//步数为0 
			book[sx][sy]=1;//标记这个点已被访问过 
			tail++;//起点坐标入队之后,队尾向后移动一格 
			while(head<tail) {
				for(int i=0;i<8;i++) {//8个方向搜索 
					int tx=que[head].x+dx[i];//下一个点的坐标 
					int ty=que[head].y+dy[i];
					if(judge(tx,ty)) { 
						que[tail].x=tx;//新的点坐标入队 
						que[tail].y=ty;
						que[tail].s=que[head].s+1;//步数等于上一个点的步数加+1 
						tail++;//每有一个新的点入队,队尾都要向后移动一格 
						book[tx][ty]=1;//标记该点 
					}
					if(tx==ex&&ty==ey) {//如果此时走到终点 
						flag=1;//修改标记变量为1 
						break;//退出循环 
					}
				}
				if(flag==1) {//依次退出循环 
					break;
				}
				head++;//未走到终点,队头向后移动一格,继续下一个点的搜索 
			}
			//注意这里的步数,请仔细看代码第43行,走到终点之后,无论如何队尾又向后移动了一格
			//之后执行到第46行时,才会判断是否到达终点,进一步退出循环,所以这里对应的是是队尾回退一格的那个点的步数 
			printf("To get from %s to %s takes %d knight moves.\n",a,b,que[tail-1].s);
		}
	}
	return 0;
}


http://www.niftyadmin.cn/n/712640.html

相关文章

高并发高流量网站架构

2019独角兽企业重金招聘Python工程师标准>>> Web2.0的兴起&#xff0c;掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念&#xff0c;细分了网站功能和用户群&#xff0c;不仅成功的造就了一大批新生的网站&#xff0c;也极大的方便了上网的人们。但…

HDU 2084:数塔(动态规划)

题目地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid2084 很简单的DP #include <iostream> #include <memory.h> #define MAXHEIGHT 105 using namespace std; int d[MAXHEIGHT][MAXHEIGHT]; int nums[MAXHEIGHT][MAXHEIGHT]; int cases, height;in…

pep8 python 编码方式_PEP8 python 编码规范整理

决定开始Python之路了&#xff0c;利用业余时间&#xff0c;争取更深入学习Python。编程语言不是艺术&#xff0c;而是工作或者说是工具&#xff0c;所以整理并遵循一套编码规范是十分必要的。PEP8 python 编码规范一.代码编排1.缩进、4个空格的缩进(编辑器都可以完成此功能)&a…

【JVM】学习JVM垃圾回收理论

参考链接&#xff1a;https://www.cnblogs.com/aspirant/p/8662690.html 一&#xff0c;垃圾回收算法 JVM内存结构&#xff1a;程序计数器、虚拟机栈、本地方法栈、堆区、方法区 1&#xff0c;引用计数法&#xff1a; 早期JAVA使用的算法 原理&#xff1a;当对象被创建时&#…

UVa 213:Message Decoding

题目传送门&#xff1a;https://cn.vjudge.net/problem/UVA-213 0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, … , 1011, 1110, 00000, … 输入头对应的字符存储在 codes[len][value] 数组中(表示长度为len且编码为value的字符)&#xff0c;例如&#x…

qt中文乱码解决方法_git 显示中文和解决中文乱码

其他链接&#xff1a;GIT使用log命令显示中文乱码 - 颜子歌 - 博客园git- win10 cmd git log 中文乱码 解决方法 windows下git中文乱码解决方式_我的blog屋-CSDN博客 解决git status不能显示中文现象&#xff1a;git status查看有改动但未提交的文件时总只显示数字串&#xff0…

Java——使用集合实现简单的斗地主发牌功能(两种方式简单粗暴!!!)

大家好啊&#xff01;&#xff01;&#xff01;暑假在家&#xff0c;想必大家该追剧的追剧&#xff0c;该打游戏的打游戏&#xff0c;反正总会找点喜欢的事情去做&#xff0c;可以说是无忧无虑咯&#xff01;&#xff01;&#xff01; 然而我却和 Java 集合打了一个星期的交道&…

vue 雷达扫描_Qt自定义控件之仪表盘3–雷达扫描图

1、设计思想雷达扫描图&#xff0c;在影视作品中见到较多&#xff0c;比如飞机雷达、舰艇雷达&#xff0c;有一个扫描线转圈代表雷达一周旋转或一个批次的收发&#xff0c;发现目标就在表盘上标记位置。和汽车仪表盘类似&#xff0c;汽车仪表盘有底盘背景图、同圆、刻度、刻度值…