问题解决策略搜索训练3

P1588 [USACO07OPEN] Catch That Cow S

题目描述

FJ 丢了一头牛,决定将其找回。FJ 和牛位于数轴上,初始位置分别为 x 和 y,牛保持不动。每次移动时,若 FJ 处于位置 p,他可移动至 p+1、p−1 或 2×p。计算 FJ 抓住牛所需的最少移动次数。

输入格式

第一行为一个整数 t (1≤t≤10),表示数据组数;

接下来每行包含一个两个正整数 x,y (0<x,y≤105),分别表示 FJ 和牛的坐标。

输出格式

对于每组数据,输出最少步数,每组数据间用换行隔开。

输入输出样例

输入 #1复制

复制代码
1 
5 17

输出 #1复制

复制代码
4

这题用bfs。

cpp 复制代码
#include<iostream>
#include<vector>
#include<queue>
#define int long long
using namespace std;
int n, k;
int ans = 0x3f3f3f3f;
const int N = 1e7;
vector<int>dis(N, 0x3f3f3f3f);
signed main()
{
	cin.tie(0);
	cout.tie(0);
	ios::sync_with_stdio(0);
	cin >> n >> k;
	dis[n] = 0;
	queue<int>q;
	q.push(n);
	while (!q.empty())
	{
		int t = q.front();
		q.pop();
		if (dis[t] >= ans)
			continue;
		if (t == k)
		{
			ans = dis[t];
			break;
		}
		if (t - 1 >= 0 && dis[t - 1] > dis[t] + 1)
		{
			q.push(t - 1);
			dis[t - 1] = dis[t] + 1;
		}
		
		if (t + 1 <= N && dis[t + 1] > dis[t] + 1)
		{
			q.push(t + 1);
			dis[t + 1] = dis[t] + 1;
		}
		if (t * 2 <=N && dis[t * 2] > dis[t] + 1)
		{
			q.push(t * 2);
			dis[t * 2] = dis[t] + 1;
		}

	}
	cout << ans;
	return 0;
}

问题 B: 拯救行动

题目描述

公主被恶人抓走并关押在牢房的某个地方。牢房用 N×MN \times MN×M (N,M≤200)(N, M \le 200)(N,M≤200) 的矩阵表示。矩阵中的每项可以代表道路 @、墙壁 # 和守卫 x

英勇的骑士决定孤身一人去拯救公主 a。假设拯救成功的表示是"骑士到达了公主所在的位置"。由于在通往公主所在位置的道路中可能遇到守卫,骑士一旦遇到守卫,必须杀死守卫才能继续前进。

先假设骑士可以向上、下、左、右四个方向移动,每移动一个位置需要 111 个单位时间,杀死一个守卫需要额外的 111 个单位时间。同时假设骑士足够强壮,有能力杀死所有的守卫。

给定牢房矩阵,公主、骑士和守卫在矩阵中的位置,计算拯救行动成功需要花费的最短时间。

输入

第一行为一个整数 SSS,表示输入的数据的组数(有多组输入)。

随后有 SSS 组数据,每组数据按如下格式输入:

  • 两个整数,代表 NNN 和 MMM (N,M≤200)(N, M \le 200)(N,M≤200);
  • 随后 NNN 行,每行有 MMM 个字符。@ 代表道路,a 代表公主,r 代表骑士,x 代表守卫,# 代表墙壁。

输出

如果拯救行动成功,输出一个整数,表示行动的最短时间;如果不可能成功,输出 Impossible

输入输出样例

样例输入 #1

复制

复制代码
1
7 8
#@#####@
#@a#@@r@
#@@#x@@@
@@#@@#@#
#@@@##@@
@#@@@@@@
@@@@@@@@
样例输出 #1

复制

复制代码
13
相关推荐
吃好睡好便好1 小时前
在Matlab中绘制圆锥三维曲面图
开发语言·人工智能·学习·算法·matlab·信息可视化
兰令水1 小时前
topcode【随机算法题】【2026.5.15打卡-java版本】
java·算法·leetcode
洛水水1 小时前
【力扣100题】44.完全平方数
算法·leetcode·职场和发展
橙淮1 小时前
哈希核心:高效映射与安全加密
算法·哈希算法
浅念-9 小时前
递归解题指南:LeetCode经典题全解析
数据结构·算法·leetcode·职场和发展·排序算法·深度优先·递归
Kiling_070410 小时前
Java集合进阶:Set与Collections详解
算法·哈希算法
智者知已应修善业10 小时前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
洛水水10 小时前
【力扣100题】33.验证二叉搜索树
算法·leetcode·职场和发展
SimpleLearingAI11 小时前
聚类算法详解
算法·数据挖掘·聚类