lt val(){
lt cnt = 0;
for(int i = 1; i <= 5; i++){
for(int j = 1; j <= 5; j++){
if(st[i][j] != tgt[i][j]) cnt++;
}
}
return cnt;
}
void dfs(lt dep, lt x, lt y, lt mdp){
if(dep == mdp) { if(!val()) fg = 1; return ; }
for(int i = 0; i < 8; i++){
lt gx = x + fx[i][0], gy = y + fx[i][1];
if(gx > 5 || gx < 1 || gy > 5 || gy < 1) continue;
swap(st[x][y], st[gx][gy]);
if(val() + dep <= mdp) dfs(dep + 1, gx, gy, mdp);
swap(st[x][y], st[gx][gy]);
}
return ;
}
???的地方我觉得应该放在哪里,可我把这个估价函数放在了 for 里面,不明白为什么,我认为放在 for 里就错了,可只有放 for 里可以 AC ,可是交换本身不算一步吗???