问题解决策略搜索训练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
相关推荐
8Qi86 小时前
LeetCode 1049:最后一块石头的重量 II —— 题解 ✅
算法·leetcode·职场和发展·动态规划·01背包
wubba lubba dub dub7506 小时前
第四十九周学习周报
人工智能·算法·机器学习
Java_2017_csdn6 小时前
ComplexKeysShardingAlgorithm 小结
java·大数据·算法
海梨花6 小时前
快手面试高频算法题
java·算法·面试
lqqjuly6 小时前
超分辨率算法深度解析(Super-Resolution Algorithms)
算法
嵌入式老牛8 小时前
液晶段码(米/日字格)识别—倾斜校正
opencv·算法·仿射变换
luj_17688 小时前
残熵算法:风险缓冲与效率优化的融合
c语言·开发语言·网络·经验分享·算法
oddsand19 小时前
pgvector 三大相似度算法
人工智能·算法·机器学习
运筹vivo@9 小时前
LeetCode 2574. 左右元素和的差值
算法·leetcode·职场和发展·每日一题
计算机安禾9 小时前
【数据库系统原理】第4篇:关系数据结构的形式化定义:域、笛卡尔积与关系模式
数据结构·数据库·算法