代码拉取完成,页面将自动刷新
/*
* @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
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。