题解
2026-07-27 16:30:05
发布于:浙江
19阅读
0回复
0点赞
首发题解,庆祝一下
大家好,我是энтджей,今天是我2026年第二十次正式发题解!
能不能点个赞
首先简化题意:
- 就是让你求按规则从变成所需要的最少步数
然后就是写代码:
-
处理输入(read):
- 正常输入
-
核心部分(process):
代码里有- 寻找到空杯子,让左边三个以及右边三个所有不会越界的青蛙进行跳跃枚举
-
最后输出(write):
- 正常输出
完整代码:
- 此题比较繁琐,防止有人直接复制,所以写的伪代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
string a, b;
struct node {
string s;
int cnt;
};
queue <node> q;
map<string, bool> vis; // 记录此状态是否出现过
signed main(){
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
// freopen("", "r", stdin);
// freopen("", "r", stdout);
cin >> a >> b; //输入a,b
q.push({a, 0}); // 将a加入q中
vis[a] = true; // 将此状态改为已访问=
while (!q.empty()) {
string s = q.front().s; // 取出当前字符串
int cnt = q.front().cnt; // 取出当前所需步数
q.pop(); // 弹出避免死循环
if (s == b) { // 已经达成b
cout << cnt; // 输出
return 0;
}
for (遍历整个字符串) {
if (找到空杯子) {
for (尝试6个方位) {
int k = 新的位置;
if (不越界) {
交换i和k
if (未出现此状态) {
更新状态为已出现
q.push({新的字符串, cnt + 1});
}
}
恢复,但如果你是用新的字符串进行调换的话就不需要恢复
}
跳出循环防止超时
}
}
}
return 0;
}
🎉完结撒花🎉
这里空空如也





有帮助,赞一个