如果IDA*超时
查看原帖
如果IDA*超时
299890
Phill楼主2024/3/5 19:49

易知走到一个点再返回上一个状态一定不是最优,故将dx,dy数组这样设计:

const int dx[4]={0,1,-1,0};
const int dy[4]={1,0,0,-1};

再记录上一个状态pre,如果pre+i==3说明返回了上一个状态,直接剪枝

for(int i=0;i<4;i++){
        int xx=x+dx[i],yy=y+dy[i];
        if(xx<0||xx>=3||yy<0||yy>=3||pre+i==3) continue;//直接剪枝
        swap(m[x][y],m[xx][yy]);
        if(g+h()<=dep&&!flag) dfs(g+1,xx,yy,i);
        swap(m[x][y],m[xx][yy]);
    }

实测效率提升巨巨巨巨巨巨巨大ヾ(≧▽≦*)o

2024/3/5 19:49
加载中...