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;

}

};

相关推荐
Jerry2 小时前
LeetCode 27. 移除元素
算法
旖-旎2 小时前
《LeetCode 1137 第N个泰波那契数 和 LeetCode 三步问题》
c++·算法·leetcode·动态规划
c++之路2 小时前
C++跨平台(九):跨平台字节序统一处理
开发语言·arm开发·c++
wabs6662 小时前
关于动态规划【力扣718.最长重复子数组的思考】
算法·leetcode·动态规划
技术小黑2 小时前
CNN算法实战系列08 | ResNeXt-50算法实战与猴痘病识别
人工智能·算法·cnn
Full Stack Developme3 小时前
Java 漏斗算法 及应用场景
java·开发语言·算法
atunet3 小时前
关于稀疏图结构的高效存储与遍历算法设计的技术7
算法
ysa0510303 小时前
【并查集】判环,深搜
数据结构·c++·算法·深度优先
Jerry3 小时前
LeetCode 704. 二分查找
算法
Gp7HH6hrE4 小时前
P1118 [USACO06FEB] Backward Digit Sums G/S
算法·深度优先