• BZOJ1085 [SCOI2005]骑士精神(IDA*)


    IDA*是IDS的基础上加上满足A*算法的估值函数来剪枝的搜索算法。

    这题代码量挺少的,可以看出整个IDA*的框架:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 
     6 char init[5][6],over[5][6]={
     7     {"11111"},
     8     {"01111"},
     9     {"00*11"},
    10     {"00001"},
    11     {"00000"}
    12 };
    13 
    14 int h(){
    15     int res=0;
    16     for(int i=0; i<5; ++i){
    17         for(int j=0; j<5; ++j){
    18             if(over[i][j]!=init[i][j]) ++res;
    19         }
    20     }
    21     return res;
    22 }
    23 
    24 int mxdep;
    25 bool isok;
    26 int dx[8]={-2,-2,-1,1,2,2,1,-1};
    27 int dy[8]={-1,1,2,2,1,-1,-2,-2};
    28 void dfs(int x,int y,int g){
    29     if(g==mxdep){
    30         if(!memcmp(init,over,sizeof(over))) isok=1;
    31         return;
    32     }
    33     if(isok) return;
    34     for(int i=0; i<8; ++i){
    35         int nx=x+dx[i],ny=y+dy[i];
    36         if(nx<0 || nx>=5 || ny<0 || ny>=5) continue;
    37         swap(init[x][y],init[nx][ny]);
    38         if(g+h()<=mxdep) dfs(nx,ny,g+1);
    39         swap(init[x][y],init[nx][ny]);
    40     }
    41 }
    42 
    43 int main(){
    44     int t;
    45     scanf("%d",&t);
    46     while(t--){
    47         int x,y;
    48         for(int i=0; i<5; ++i){
    49             for(int j=0; j<5; ++j){
    50                 scanf(" %c",&init[i][j]);
    51                 if(init[i][j]=='*') x=i,y=j;
    52             }
    53         }
    54         for(mxdep=0,isok=0; mxdep<=15 && !isok; ++mxdep){
    55             dfs(x,y,0);
    56         }
    57         if(isok) printf("%d
    ",mxdep-1);
    58         else puts("-1");
    59     }
    60     return 0;
    61 }
  • 相关阅读:
    Linux 网络编程之ioctl函数
    驱动编写及编译例子
    字符串字面量与指针
    ubuntu 下安装nfs
    android 开源项目
    【转】中间件的历史来看移动App开发的未来
    android 关联源码
    【转】android 蓝牙
    【转】Android Google Map API使用的八个步骤
    【转】Android 国内集成使用谷歌地图
  • 原文地址:https://www.cnblogs.com/WABoss/p/4940966.html
Copyright © 2020-2023  润新知