为什么放在这里就错了?
查看原帖
为什么放在这里就错了?
457492
ysl_wf楼主2024/7/11 16:02
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(val() + dep > mdp) return ; ???

    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 ,可是交换本身不算一步吗???

2024/7/11 16:02
加载中...