题目大意
将一个素数变成另一个素数,一次只能变一位数,且每次也要变成素数,求最少的变换次数。
解题思路
预先处理出四位数的素数表,之后进行BFS。
对每个出队元素 a a a ,遍历前面打好的素数表,若有符合条件的 b b b (即从 a a a 到 b b b 只改变了一位数字),则入队。
判断改变是否合法的函数使得代码比较简洁:
bool canChange(int a, int b) {
int num = 0, ag, bg;
while (a) {
ag = a%10; a /= 10;
bg = b%10; b /= 10;
if (ag != bg) num++; //统计数字不一样的位数
}
return num == 1;
}
注意事项
1.写了个 getP()
函数要记得执行啊orz…
2.素数打表只需要存 [ 1000 , 9999 ] [1000,9999] [1000