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<board0.size();j++){

start=start+to_string(boardij);

}

}

//开始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:mappingidx){

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

neighbors.push_back(new_board);

}

return neighbors;

}

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

char tmp=boardi;

boardi=boardj;

boardj=tmp;

return board;

}

};

相关推荐
凯瑟琳.奥古斯特8 分钟前
力扣1015C++解法技巧
c++·算法·leetcode·链表·职场和发展
seowmt17 分钟前
GEO效果该什么时候看数据:从立项到复盘的时间线复盘
算法·ip·seo·geo·faq
悠仁さん17 分钟前
【算法C++】双指针(一)
数据结构·c++·算法
文丑颜不良啊19 分钟前
LeetCode626~650题目解析
java·leetcode
jimy124 分钟前
lvalue、xvalue、prvalue(二):引用是哪一类?
开发语言·c++·1024程序员节
小豆庄26 分钟前
本地视频脱敏的追踪系统踩坑——车牌过滤、转场误判与ID冲突排查
人工智能·算法·目标检测·音视频·视频·敏捷流程·纹理贴图
忆挽篱笙歌26 分钟前
进程替换函数与shenll命令行解释器
前端·javascript·算法
YukiRinLL28 分钟前
字符串存储与 BF、KMP 匹配算法
数据结构·算法
小超人诞生日记34 分钟前
Linux:环境变量 & 进程虚拟地址空间
linux·算法
杜 硕35 分钟前
从零开始的C++生活——第三讲
开发语言·c++·生活