当前位置:   article > 正文

算法.bfs八数码

算法.bfs八数码

  1. #include<iostream>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<queue>
  5. #include<unordered_map>
  6. using namespace std;
  7. int dx[4] = { 1,-1,0,0 };
  8. int dy[4] = { 0,0,-1,1 };
  9. int bfs(string state)
  10. {
  11. queue<string>q;
  12. unordered_map<string, int>d;
  13. q.push(state);
  14. d[state] = 0;
  15. while (q.size())
  16. {
  17. auto t = q.front();
  18. int dis = d[t];
  19. int k = t.find('x');
  20. int x = k / 3, y = k % 3;
  21. q.pop();
  22. string end = "12345678x";
  23. if (t == end)return d[t];
  24. for (int i = 0; i < 4; i++)
  25. {
  26. int a = x + dx[i], b = y + dy[i];
  27. if (a >= 0 && a < 3 && b >= 0 && b < 3)
  28. {
  29. swap(t[a * 3 + b], t[k]);
  30. if (!d.count(t))
  31. {
  32. d[t] = dis + 1;
  33. q.push(t);
  34. }
  35. swap(t[a * 3 + b], t[k]);
  36. }
  37. }
  38. }
  39. return -1;
  40. }
  41. int main()
  42. {
  43. string state;
  44. for (int i = 0; i < 9; i++)
  45. {
  46. char s;
  47. cin >> s;
  48. state += s;
  49. }
  50. cout << bfs(state);
  51. return 0;
  52. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/87285
推荐阅读
相关标签
  

闽ICP备14008679号