第八届蓝桥杯c++大学A组(省赛)——第二题
2018-03-04 19:16
477 查看
(转自博主mylegendarytime)
本题的思路比较浅显,显然广搜。但是实际用程序模拟的过程中,状态不太容易书写与表示。借鉴了一下他人的写法。
本题的思路比较浅显,显然广搜。但是实际用程序模拟的过程中,状态不太容易书写与表示。借鉴了一下他人的写法。
#include <cstdio> #include <string> #include <queue> #include <map> using namespace std; #define fi first #define se second #define pr make_pair typedef pair<string, int> psi; const string st = "012345678"; const string ed = "087654321"; const int d[5] = {1, 2, 7, 8}; queue<pair<psi, int> > que; map<string, string> parent; int main() { // 将一个状态用string和字符0在该string中的位置来表示 // 一个状态还会附加上步数 int ans; parent[st] = ""; que.push(pr(pr(st, 0), 0)); while (!que.empty()) { string x = que.front().fi.fi; int pos = que.front().fi.se; int length = que.front().se; if (x == ed) { ans = length; break; } que.pop(); for (int i = 0; i < 4; i++) { string y = x; swap(y[pos], y[(pos + d[i]) % 9]); if (parent.count(y) == 0) { parent[y] = x; que.push(pr(pr(y, (pos + d[i]) % 9), length + 1)); } } } printf("ans = %d\n\n", ans); // 打印蚂蚱跳跃的路径 for ( 4000 string now = ed; now != ""; now = parent[now]) { printf("%s\n", now.c_str()); } return 0; }
相关文章推荐
- 第八届蓝桥杯c++大学A组(省赛)——第四题
- (2017)第八届蓝桥杯大赛个人赛省赛(软件类) C/C++ 大学A组 题解(第一题和第二题)
- 2017第八届蓝桥杯C/C++ B组省赛第二题(素数筛法+枚举)
- 第八届蓝桥杯c++大学A组(省赛)——第五题
- 2017第八届蓝桥杯C/C++ B组省赛第二题 秒解
- 2017第八届蓝桥杯C/C++ B组省赛 第二题
- 第八届蓝桥杯省赛B组c++_购物单
- 第八届蓝桥杯C/C++B组【第二题】
- 第八届蓝桥杯c++大学A组——第一题
- 2017年第八届蓝桥杯省赛B组 C/C++
- 2017第八届蓝桥杯C++B组省赛之等差素数列题
- 第八届 蓝桥杯 c/c++ B组 省赛 (2)——等差素数列
- 第八届蓝桥杯省赛B组c++_等差素数列
- 2016第七届蓝桥杯C/C++ B组省赛第二题:生日蜡烛
- 第八届 蓝桥杯 c/c++ B组 省赛 (3)——承压计算
- 第八届 蓝桥杯 c/c++ B组 省赛 (5)——取数位
- 第八届 蓝桥杯 c/c++ B组 省赛 (10)——k倍区间
- 第八届蓝桥杯省赛B组c++_日期问题
- 2018年第九届蓝桥杯【C++省赛B组】【第二题:明码】
- 第八届蓝桥杯省赛B组c++_承压计算