Hihocoder 1426 E. What a Ridiculous Election (BFS)
2017-07-16 18:29
197 查看
Problem
12345可以经过若干次操作转换为其它五位数。
操作分三种,分别为:
交换相邻两数
选择一位 +1,若大于 9 ,则对 10 取模
选择一位 *2 ,若大于 9,则对 10 取模
其中操作 2 最大进行 3 次,操作 3 最多进行 2 次。
对于给定的五位数,求
12345在满足限制条件情况下,最少通过几步操作可以转换为目标五位数。若不可能,则输出 -1 。
解题思路
BFS 预处理产生12345能够变换出的所有可能五位数,记录操作 2 和操作 3 的次数作为限制。
代码
#include<bits/stdc++.h> using namespace std; int minStp[100000][4][3]; string str; struct Node { string s; int op2, op3, stp; Node() {}; Node(string _s, int _op2, int _op3, int _stp) { s = _s, op2 = _op2, op3 = _op3, stp = _stp; } } p, q; bool operator<(Node a, Node b) { return a.stp > b.stp; } int str2int(string s) { int ret = 0; for(int i=0;i<5;i++) ret *= 10, ret += s[i]-'0'; return ret; } void bfs() { priority_queue<Node> que; que.push(Node("12345", 0, 0, 0)); minStp[12345][0][0] = 0; int num; while(!que.empty()) { p = que.top(); que.pop(); q.stp = p.stp + 1; for(int i=0;i<4;i++) { q.s = p.s; swap(q.s[i], q.s[i+1]); q.op2 = p.op2, q.op3 = p.op3; num = str2int(q.s); if(minStp[num][q.op2][q.op3] != 0x3f3f3f3f) continue; minStp[num][q.op2][q.op3] = q.stp; que.push(q); } if(p.op2 < 3) { for(int i=0;i<5;i++) { q.s = p.s; q.s[i] = char(((q.s[i]-'0')+1)%10 + '0'); q.op2 = p.op2+1, q.op3 = p.op3; num = str2int(q.s); if(minStp[num][q.op2][q.op3] != 0x3f3f3f3f) continue; minStp[num][q.op2][q.op3] = q.stp; que.push(q); } } if(p.op3 < 2) { for(int i=0;i<5;i++) { q.s = p.s; q.s[i] = char(((q.s[i]-'0')*2)%10 + '0'); q.op2 = p.op2, q.op3 = p.op3+1; num = str2int(q.s); if(minStp[num][q.op2][q.op3] != 0x3f3f3f3f) continue; minStp[num][q.op2][q.op3] = q.stp; que.push(q); } } } } int main() { memset(minStp, 0x3f, sizeof(minStp)); bfs(); while(cin>>str) { int mn = 0x3f3f3f3f; for(int i=0;i<=3;i++) for(int j=0;j<=2;j++) mn = min(mn, minStp[str2int(str)][i][j]); printf("%d\n", mn==0x3f3f3f3f?-1:mn); } }
相关文章推荐
- hihocoder1426 What a Ridiculous Election(bfs预处理)
- HihoCoder 1426 What a Ridiculous Election (BFS)
- hihocoder 1426 What a Ridiculous Election
- 2016 ACM-ICPC 亚洲区域赛北京站E题 What a Ridiculous Election (BFS预处理)
- hihocoder1426 What a Ridiculous Election(bfs预处理)
- 2016北京区域赛E UVAlive 7672 题目:What a Ridiculous Election 带约束条件的BFS
- UVALive - 7672 - What a Ridiculous Election(搜索预处理)
- UVALive 7672 - What a Ridiculous Election (暴力)
- POJ1426——BFS——Find The Multiple
- 【原】 POJ 1426 Find The Multiple BFS搜索 解题报告
- POJ-1426-Find The Multiple(BFS DFS)
- POJ 1426 DFS BFS两种写法
- Poj 1426--Find The Multiple(bfs或dfs)
- POJ 1426 Find The Multiple (BFS基础)
- POJ 1426 Find The Multiple (bfs)
- poj1426 bfs+同余数定理
- POJ 1426 (BFS)
- loj 1426(dfs + bfs)
- hihocoder1426||UVALive - 7672 What a Ridiculous Election
- POJ 1426 Find The Multiple(bfs)