LeetCode:773. 滑动谜题

class Solution {

public:

int slidingPuzzle(vector<vector<int>>& board) {

string target="123450";

string start="";

for(int i=0;i<board.size();i++){

for(int j=0;j<board[0].size();j++){

start=start+to_string(board[i][j]);

}

}

//开始BFS算法

unordered_set<string>visited;

queue<string>q;

//从起点开始搜索

q.push(start);

visited.insert(start);

int step=0;

while(!q.empty()){

int sz=q.size();

for(int i=0;i<sz;i++){

string cur=q.front();

q.pop();

//判断是否达到目标

if(target==cur){

return step;

}

//将数字0和周围数字交换位置

for(string neighborBoard:getNeighbors(cur)){

//防止走回头路

if(!visited.count(neighborBoard)){

q.push(neighborBoard);

visited.insert(neighborBoard);

}

}

}

step++;

}

return -1;

}

vector<string>getNeighbors(string board){

vector<vector<int>>mapping={

{1,3},

{0,4,2},

{1,5},

{0,4},

{3,1,5},

{4,2}

};

int idx=board.find('0');

vector<string>neighbors;

for(int adj:mapping[idx]){

string new_board=swap(board,idx,adj);

neighbors.push_back(new_board);

}

return neighbors;

}

string swap(string board, int i, int j){

char tmp=board[i];

board[i]=board[j];

board[j]=tmp;

return board;

}

};

相关推荐
Thera77713 分钟前
【Linux C++】彻底解决僵尸进程:waitpid(WNOHANG) 与 SA_NOCLDWAIT
linux·服务器·c++
Wei&Yan17 分钟前
数据结构——顺序表(静/动态代码实现)
数据结构·c++·算法·visual studio code
wregjru33 分钟前
【QT】4.QWidget控件(2)
c++
浅念-38 分钟前
C++入门(2)
开发语言·c++·经验分享·笔记·学习
小羊不会打字1 小时前
CANN 生态中的跨框架兼容桥梁:`onnx-adapter` 项目实现无缝模型迁移
c++·深度学习
团子的二进制世界1 小时前
G1垃圾收集器是如何工作的?
java·jvm·算法
Max_uuc1 小时前
【C++ 硬核】打破嵌入式 STL 禁忌:利用 std::pmr 在“栈”上运行 std::vector
开发语言·jvm·c++
吃杠碰小鸡1 小时前
高中数学-数列-导数证明
前端·数学·算法
故事不长丨1 小时前
C#线程同步:lock、Monitor、Mutex原理+用法+实战全解析
开发语言·算法·c#
long3161 小时前
Aho-Corasick 模式搜索算法
java·数据结构·spring boot·后端·算法·排序算法