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

洛谷 P10491 [USACO09NOV] The Chivalrous Cow B C语言 bfs

题目:

https://www.luogu.com.cn/problem/P10491?contestId=217365

题目背景

农民 John 有很多牛,他想交易其中一头被 Don 称为 The Knight 的牛。这头牛有一个独一无二的超能力,在农场里像 Knight 一样地跳(就是我们熟悉的象棋中马的走法)。虽然这头神奇的牛不能跳到树上和石头上,但是它可以在牧场上随意跳,我们把牧场用一个 x,y 的坐标图来表示。

题目描述

这头神奇的牛像其它牛一样喜欢吃草,给你一张地图,上面标注了 The Knight 的开始位置,树、灌木、石头以及其它障碍的位置,除此之外还有一捆草。现在你的任务是,确定 The Knight 要想吃到草,至少需要跳多少次。The Knight 的位置用 K 来标记,障碍的位置用 * 来标记,草的位置用 H 来标记。

这里有一个地图的例子:

思路简单的bfs模版,方向数组改成八个就可以。

代码如下:

#include <iostream>
#include<algorithm>
#include<queue>
using namespace std;
int dx[8]={-1,-2,-2,-1,1,2,2,1};
int dy[8]={2,1,-1,-2,2,1,-1,-2};//马走8个方向
struct Node{
	int x;
	int y;
	int step;
};
bool stl[1005][1005];
char map[1005][1005];
int n,m;
int startx,starty;
int endx,endy;
int main() 
{
	queue <Node> q;
	cin >> m >> n;
	for(int i = 1 ; i <= n ; i++)
	{
		for(int j = 1 ; j <= m ; j++)
		{
			cin >> map[i][j];
			if(map[i][j] == 'K')
			{
				startx = i;
				starty = j;	
			}
			if(map[i][j] == 'H')
			{
				endx = i;
				endy = j;
			}
		}
	}
	
	Node start = {startx,starty,0};
	q.push(start);
	stl[startx][starty] = true;//标记已走过 
	
	while(!q.empty())
	{
		int x = q.front().x;//取出队首的三个数据 
		int y = q.front().y;
		int step = q.front().step;
		if(x == endx && y == endy)
		{
			cout << step << endl;
			break;
		}
		for(int k = 0 ; k < 8 ; k++)
		{
			int tx = x + dx[k];
			int ty = y + dy[k];
			if(tx >= 1 && tx <= n && ty >= 1 && ty <= m && stl[tx][ty] == false && map[tx][ty] != '*' )
			{
				stl[tx][ty] = true;//标记已访问 
				Node newpos ={tx,ty,step+1};
				q.push(newpos);
			}
		 } 
		 q.pop();
	}



	return 0;
}


http://www.kler.cn/a/418158.html

相关文章:

  • VideoBooth: Diffusion-based Video Generation with Image Prompts
  • 第29天 MCU入门
  • elastic net回归
  • 内网穿透步骤
  • 【真正离线安装】Adobe Flash Player 32.0.0.156 插件离线安装包下载(无需联网安装)
  • 【人工智能基础03】机器学习(练习题)
  • Flink双流Join
  • # issue 6 网络编程基础
  • 力扣 全排列-46
  • 【热门主题】000068 筑牢网络安全防线:守护数字世界的坚实堡垒
  • 玩转Docker | 使用Docker部署MediaCMS内容管理系统
  • 自动化检测三维扫描仪-三维扫描仪检测-三维建模自动蓝光测量系统
  • Aes加解密
  • WEB攻防-通用漏洞XSS跨站MXSSUXSSFlashXSSPDFXSS
  • 如何使用Python解析从淘宝API接口获取到的JSON数据?
  • DPDK用户态协议栈-Tcp Posix API 1
  • 如何使用git fetch与git pull,在团队协作中二者有什么区别,具体案例分析并深入理解
  • AI开发-深度学习框架-PyTorch-torchnlp
  • 【看海的算法日记✨优选篇✨】第三回:二分之妙,寻径中道
  • 声音克隆技术:探索与实践 —— 从GPT-SoVITS V2到未来趋势20241201
  • 进程状态的学习
  • 【Qt中实现屏幕录制】
  • 用Leangoo领歌敏捷看板工具管理跨境电商物流出运的流程
  • redis面试复习
  • PyTorch介绍
  • 深度学习 | pytorch + torchvision + python 版本对应及环境安装