焦听云 发表于 2025-6-9 16:26:01

ABC243

ABC224

D

题目大意

有一个九个点的无向图棋盘,上面有八个棋子,一次操作能将一个棋子沿边移到空点上,问将每个棋子移到与它编号相同的点最少几步。
解题思路

考虑使用 BFS。
用 string 存储状态,\(s_i\) 表示 \(i\) 号格点上棋子的编号,\(0\) 表示没有棋子。
注意:一开始不能直接修改 \(s_i\),因为 \(s\) 是空串,修改一直都是空串,需要初始化为000000000。
利用 unordered_map 判断此状态是否访问过,用 map 会 TLE。
每次找到字符串中的 \(0\),用链式向前星遍历相邻点,然后交换两者位置,没有访问过放入队列即可。
如果找到状态为123456780,就输出答案,没有说明无解,输出 \(-1\)。
代码

#include#define endl "\n"using namespace std;const int N = 40;struct edge{        int to, next;} e = '0' + i;        }        q.push(make_pair(s, 0));        mp = 1;        while (!q.empty())        {                s = q.front().first;                int x = q.front().second;                q.pop();                if (s == " 123456780")                {                        coutw >> n;        for (int i = 1; i > q.x >> q.y >> q.w;                q.id = i;        }        sort(q + 1, q + n + 1, cmp);        memset(a, -1, sizeof a);        memset(b, -1, sizeof b);        memset(c, 0x7f, sizeof c);        memset(d, 0x7f, sizeof d);        for (int i = n; i >= 1; i--)        {                if (q.w < c.x])                {                        dp.id] = a.x] + 1;                        c.x] = c.x];                        c.x] = q.w;                        a.x] = a.x];                }                else                {                        dp.id] = a.x] + 1;                }                if (q.w < d.y])                {                        dp.id] = max(dp.id], b.y] + 1);                        d.y] = d.y];                        d.y] = q.w;                        b.y] = b.y];                }                else                {                        dp.id] = max(dp.id], b.y] + 1);                }                a.x] = max(a.x], dp.id]);                b.y] = max(b.y], dp.id]);        }        for (int i = 1; it >> a >> b;        if (s == t)        {                cout

赐度虻 发表于 2025-11-26 19:57:01

喜欢鼓捣这些软件,现在用得少,谢谢分享!

痕伯 发表于 2026-1-15 21:22:04

东西不错很实用谢谢分享

士沌 发表于 2026-1-19 02:27:42

感谢分享

栓汨渎 发表于 2026-1-19 04:48:01

感谢,下载保存了

巨耗 发表于 2026-1-21 11:31:50

用心讨论,共获提升!

益竹月 发表于 2026-1-25 01:27:29

喜欢鼓捣这些软件,现在用得少,谢谢分享!

户烫擞 发表于 2026-1-25 09:32:22

东西不错很实用谢谢分享

松菊 发表于 2026-1-28 05:48:53

很好很强大我过来先占个楼 待编辑

东门芳洲 发表于 2026-2-3 03:07:17

不错,里面软件多更新就更好了

飧沾 发表于 2026-2-3 08:08:17

收藏一下   不知道什么时候能用到

济曝喊 发表于 2026-2-4 21:26:12

这个有用。

痕伯 发表于 2026-2-5 03:12:04

喜欢鼓捣这些软件,现在用得少,谢谢分享!

归筠溪 发表于 2026-2-5 03:13:09

谢谢楼主提供!

叭遭段 发表于 2026-2-5 09:45:23

用心讨论,共获提升!

钦娅芬 发表于 2026-2-7 05:48:13

感谢分享

辅箱肇 发表于 2026-2-8 08:16:00

新版吗?好像是停更了吧。

胁冉右 发表于 2026-2-8 15:16:04

谢谢分享,辛苦了

柴古香 发表于 2026-2-8 20:43:17

用心讨论,共获提升!

舒菀菀 发表于 2026-2-9 01:48:38

这个有用。
页: [1] 2
查看完整版本: ABC243