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;

}

};

相关推荐
LXS_357几秒前
STL - 函数对象
开发语言·c++·算法
aini_lovee4 分钟前
基于粒子群算法(PSO)优化BP神经网络权值与阈值的实现
神经网络·算法
专注于ai算法的踩坑小达人7 分钟前
C++变量全面总结
c++·qt
老鼠只爱大米13 分钟前
LeetCode经典算法面试题 #230:二叉搜索树中第K小的元素(递归法、迭代法、Morris等多种实现方案详细解析)
算法·leetcode·二叉搜索树·二叉树遍历·第k小的元素·morris遍历
星期五不见面15 分钟前
嵌入式学习!(一)C++学习-leetcode(21)-26/1/29
学习·算法·leetcode
阿猿收手吧!16 分钟前
【C++】atmoic原子操作与并发安全全解析
开发语言·c++·安全
2501_9413220321 分钟前
通信设备零部件识别与检测基于改进YOLOv8-HAFB-2算法实现
算法·yolo
凯子坚持 c25 分钟前
C++基于微服务脚手架的视频点播系统---客户端(1)
开发语言·c++·微服务
modelmd28 分钟前
【递归算法】汉诺塔
python·算法
CSDN_RTKLIB30 分钟前
SharedPtr测试步骤说明
c++