骑士遍历初级版

该文章详细阐述了如何使用C++中的深度优先搜索算法解决从给定点A到点B的马走日字路径问题,提供了一个示例和相关代码。
摘要由CSDN通过智能技术生成

时间限制:1秒        内存限制:128M

题目描述

如图,从左下角A点出发,马只能向右走,根据马走日字的规则,究竟如何走才能到达右上角B点

输入描述

两个整数x、y,代表右上角B点的坐标,A点默认为(1,1),x,y<=1000

输出描述

马走的路径方向,例如上图路径可表示为4 3 2 4 1 4,但注意,为了保证结果唯一,程序中马尝试各方向的顺序如上图,依次为1、2、3、4.因此上图的正确答案为3 2 4 1 4 4,如果无路可走,则输出-1

样例

输入

5 5

输出

4 1 4 4
#include<cmath>
#include<cstdio>
#include<queue>
#include<string>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<algorithm>
using namespace std;
int road[100];
int dx[5]= {0,1,2,2,1};
int dy[5]= {0,-2,-1,1,2};
int flag;
int ex,ey;
void dfs(int x,int y,int k) {
	if(flag==1) {
		return;
	}
	if(x==ex&&y==ey) {
		flag=1;
		for(int i=0; i<k; i++) {
			cout<<road[i]<<" ";
		}
		return;        
	}
	if((ey-y)>2*(ex-x)){
		return;
	} 
	for(int i=1; i<=4; i++) {
		int nx=x+dx[i];
		int ny=y+dy[i];
		if(!flag&&nx>=1&&nx<=ex&&ny>=1&&ny<=ey) {
			road[k]=i;
			dfs(nx,ny,k+1);
		}
	}
	return ;
}
int main() {
	cin>>ex>>ey;
	dfs(1,1,0) ;
	if(flag==0){
		cout<<-1;
	} 
	return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值