广搜题,自己的代码写的太长了,把yimao哥的BFS生成新数字的代码拿出来分享一下。
void divide(int x, int *b){
int t= 0;
while(x) b[++t]= x%10, x/= 10;
}
for(int i=1; i<=4; ++i){ // 枚举数a的每一位,b[i],b[4]是最高位,b[1]是个位;
for(int j=0; j<=9; ++j){ // 用0-9这些数字去逐一代替;
if( j==b[i] || (i==4&&j==0) ) continue; // b[4]是最高位,不可以为0; 并且相同的数字没必要再用;
int g= a - b[i]*(int)pow(10.0, i-1) + j*(int)pow(10.0, i-1); //产生新的数,比如1033的十位变成7,就是1033 - 3*10 + 7*10;