1 Star 0 Fork 1

陈鹏/leecode with labuladong

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
773.滑动谜题.cpp 1.39 KB
一键复制 编辑 原始数据 按行查看 历史
陈鹏 提交于 2022-07-24 14:14 . BFS
/*
* @lc app=leetcode.cn id=773 lang=cpp
*
* [773] 滑动谜题
*/
// @lc code=start
class Solution {
private:
vector<vector<int>> neighbors = {{1, 3}, {0, 2, 4}, {1, 5}, {0, 4}, {1, 3, 5}, {2, 4}};
public:
int slidingPuzzle(vector<vector<int>>& board) {
auto get = [&](string& status) -> vector<string> {
vector<string> ret;
int x = status.find('0');
for (int y : neighbors[x]) {
swap(status[x], status[y]);
ret.emplace_back(status);
swap(status[x], status[y]);
}
return ret;
};
string initial;
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 3; ++j) {
initial += char(board[i][j] + '0');
}
}
if (initial == "123450") return 0;
queue<pair<string, int>> que;
que.emplace(initial, 0);
unordered_set<string> seen = {initial};
while (!que.empty()) {
auto[status, step] = que.front();
que.pop();
for (auto&& next_status : get(status)) {
if (!seen.count(next_status)) {
if (next_status == "123450") return step + 1;
que.emplace(next_status, step + 1);
seen.emplace(next_status);
}
}
}
return -1;
}
};
// @lc code=end
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Chan1998/leecode-with-labuladong.git
git@gitee.com:Chan1998/leecode-with-labuladong.git
Chan1998
leecode-with-labuladong
leecode with labuladong
master

搜索帮助