广搜 魔法数字
移动字母
https://ac.nowcoder.com/acm/contest/6218/A
看题 想到搜索 写了一下深搜爆栈 害 虽然不愿意 但是还是得写广搜了(广搜写的少 不太熟练emmm)
开两个数组 一个存经过得运算结果 一个存最终某个结果的步数
然后判断条件 剪枝一下
cz为当前所处状态的话
后退时候
存步数a[cz - 1]= a[cz] + 1;
记录结果
b[hzz] = cz - 1;
hzz++;
前进时候
存步数a[cz + 1] = a[cz] + 1;
记录结果
b[hzz] = cz + 1;
hzz++;
翻倍时候
存步数a[cz * cz] = a[cz] + 1;
记录结果
b[hzz] = cz*cz;
hzz++;
class Solution { public: int a[110000],b[1100000]; int solve(int n, int m) { b[0] = n; if (n == m)return 0; int qzz=0, hzz=1; memset(a, -1, sizeof(a)); a[n] = 0; while (qzz<hzz) { int cz = b[qzz]; qzz++; if (cz > 1 && -1 == a[cz - 1]) { a[cz - 1]= a[cz] + 1; b[hzz] = cz - 1; hzz++; } if (cz +1<=100000 && -1 == a[cz + 1]) { a[cz + 1] = a[cz] + 1; b[hzz] = cz + 1; hzz++; } if (1ll*cz*cz <=100000 && -1 == a[cz *cz]) { a[cz * cz] = a[cz] + 1; b[hzz] = cz *cz ; hzz++; } } return a[m]; } };