算法.bfs八数码

cpp 复制代码
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<unordered_map>
using namespace std;
int dx[4] = { 1,-1,0,0 };
int dy[4] = { 0,0,-1,1 };
int bfs(string state)
{
    queue<string>q;
    unordered_map<string, int>d;
    q.push(state);
    d[state] = 0;
    while (q.size())
    {
        auto t = q.front();

        int dis = d[t];
        int k = t.find('x');
        int x = k / 3, y = k % 3;

        q.pop();
        string end = "12345678x";
        if (t == end)return d[t];
        for (int i = 0; i < 4; i++)
        {
            int a = x + dx[i], b = y + dy[i];
            if (a >= 0 && a < 3 && b >= 0 && b < 3)
            {
                swap(t[a * 3 + b], t[k]);
                if (!d.count(t))
                {
                    d[t] = dis + 1;
                    q.push(t);
                }
                swap(t[a * 3 + b], t[k]);
            }
            
        }
    }
    
    return -1;
}

int main()
{
    string state;
    for (int i = 0; i < 9; i++)
    {
        char s;
        cin >> s;
        state += s;
    }
    cout << bfs(state);
    return 0;
}
相关推荐
海带紫菜菠萝汤几秒前
企业批量PDF翻译方案:从选型到部署的完整指南
人工智能·算法·pdf
贵慜_Derek16 分钟前
vLLM-05|MLA、Compressor、Indexer 与 SWA:Flash 注意力栈在 vLLM 里怎么落地
人工智能·算法·llm
冻柠檬飞冰走茶17 分钟前
PTA基础编程题目集 7-13 日K蜡烛图(C语言实现)
c语言·开发语言·数据结构·算法
Databend25 分钟前
从全表排序到概率统计:Databend 如何用 KLL、Top-N 与 CMS 改进基数估计
大数据·数据库·算法
imuliuliang32 分钟前
分治法在大数据计算中的并行化应用探索7
算法
Lsir10110_44 分钟前
【力扣hot100】矩阵题通关复盘
算法·leetcode·矩阵
退休倒计时1 小时前
【每日一题】LeetCode 207. 课程表 TypeScript
算法·leetcode·typescript
稚南城才子,乌衣巷风流1 小时前
树的重心:概念、性质与算法详解
算法·深度优先·图论
不会就选b1 小时前
算法日常・每日刷题--<哈希>1
算法·哈希算法
zander2581 小时前
LeetCode 207. 课程表
算法·深度优先