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

洛谷 P1747 好奇怪的游戏 C语言 bfs

题目:

https://www.luogu.com.cn/problem/P1747#submit

题目描述

爱与愁大神坐在公交车上无聊,于是玩起了手机。一款奇怪的游戏进入了爱与愁大神的眼帘:***(游戏名被打上了马赛克)。这个游戏类似象棋,但是只有黑白马各一匹,在点 x1,y1 和 x2,y2​ 上。它们得从点 x1,y1和 x2,y2走到 (1,1)。这个游戏与普通象棋不同的地方是:马可以走“日”,也可以像象走“田”。现在爱与愁大神想知道两匹马到 (1,1) 的最少步数,你能帮他解决这个问题么?

注意不能走到 x 或 y 坐标 ≤0 的位置。

输入格式

第一行两个整数 x1,y1。

第二行两个整数 x2,y2

输出格式

第一行一个整数,表示黑马到 (1,1)的步数。

第二行一个整数,表示白马到 (1,1)的步数。

思路:简单的两次bfs,用函数就好了,不过记得要用memset重置下状态数组stl。

代码如下:

#include <iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int dx[12]={2,2,-2,-2,-1,-1,1,1,-2,-2,2,2};
int dy[12]={2,-2,2,-2,-2,2,-2,2,1,-1,1,-1};
struct Node{
	int x;
	int y;
	int step;
};
int map[100][100];
bool stl[100][100];
int x1,y1,x2,y2;
int bfs(int x,int y)
{
	queue <Node> q;
	Node start = {x,y,0};
	q.push(start);
	stl[x][y] = true;//标记已走过 
	while(!q.empty())
	{
		int x = q.front().x;//取出队首的三个数据 
		int y = q.front().y;
		int step = q.front().step;
		if(x == 1 && y ==1)
		{
		   return step ;
			break;
		}
		for(int k = 0 ; k < 12 ; k++)
		{
			int tx = x + dx[k];
			int ty = y + dy[k];
			if(stl[tx][ty] == false && tx >=1 && tx <= 20 && ty >=1 && ty <= 20 )
			{
				stl[tx][ty] = true;//标记已访问 
				Node newpos ={tx,ty,step+1};
				q.push(newpos);
			}
		 } 
		 q.pop();
	}
	return -1;
}
int main() 
{
	cin >> x1 >> y1 >> x2 >> y2;
	
 	cout << bfs(x1,y1) << endl;
 	memset(stl,false,sizeof stl);
	cout << bfs(x2,y2) << endl;

	return 0;
}


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

相关文章:

  • 挑战用React封装100个组件【001】
  • 扫雷-完整源码(C语言实现)
  • 输入json 达到预览效果
  • 如何正确使用 GitHub API 获取特定版本信息:详解错误排查与解决方案
  • LeetCode:19.删除链表倒数第N个节点
  • 【MySQL篇】持久化和非持久化统计信息的深度剖析(第一篇,总共六篇)
  • [VSCode] vscode下载安装及安装中文插件详解(附下载文件)
  • python学习——二维列表的列表生成式
  • volcano k8s 部署
  • 【Git下载、安装和使用教程】
  • 跟李笑来学美式俚语(Most Common American Idioms): Part 38
  • 算法盒子模型转换步骤+操作命令记录
  • css3弹性布局
  • 【初级测试常用的sql命令及实例解析】
  • SpringMVC——SSM整合
  • es6 中的箭头函数?
  • Mybatis集成篇(一)
  • 使用 Go 语言中的 Context 取消协程执行
  • MySQL安装与卸载(linux)
  • docker查询是否运行
  • 《Unity Shader 入门精要》高级纹理
  • 网络编程中的字节序函数htonl()、htons()、ntohl()和ntohs()
  • C# 7.1 .Net Framwork4.7 VS2017环境下,方法的引用与调用
  • InstructGPT——AI 模型的对齐革命
  • 【插入排序】:直接插入排序、二分插入排序、shell排序
  • Python练习47