[AcWing] 845. 八数码(C++实现)---bfs的应用
1. 题目
2. 读题(需要重点注意的东西)
思路:
题意:如下九宫格玩具,问将九宫格恢复成如下状态所需的最小步数
状态怎么表示?
用一维数组来表示,如上图,就表示为 “12345678x”
如何处理状态?
① 枚举x的上下左右四个位置,交换x和该位置,然后将此状态加入队列中;
② 然后队列依次出队,出队时判断当前状态是不是最终状态"12345678x",再枚举x的上下左右四个位置,直至队列为空,则返回-1,表示不能达到最终状态。
一句话思路:
枚举x的上下左右四个位置,交换x和该位置,然后将此状态加入队列中,然后依次出队重复上述操作,在出队时判断判断当前状态是不是最终状态"12345678x"。
3. 解法
---------------------------------------------------解法---------------------------------------------------
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <queue>
using namespace std;
int bfs(string state)
{
queue<string> q; // 队列
unordered_map<string, int> d; // 哈希表:存储每个状态所用的最短步数
q.