zoukankan      html  css  js  c++  java
  • bzoj1085 [SCOI2005]骑士精神

    题目链接

    暴力DFS当然不行

    于是迭代加深吧。IDA*

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 int tt,k,flag;
     6 int ans[5][5]=
     7 {
     8 {1,1,1,1,1},
     9 {0,1,1,1,1},
    10 {0,0,2,1,1},
    11 {0,0,0,0,1},
    12 {0,0,0,0,0}
    13 };
    14 int xx[8]={1,1,-1,-1,2,2,-2,-2},yy[8]={2,-2,2,-2,1,-1,1,-1};
    15 int pd1(int a[5][5])
    16 {
    17     for(int i=0;i<5;i++)
    18         for(int j=0;j<5;j++)
    19            if(ans[i][j]!=a[i][j])return 0;
    20     return 1;
    21 }
    22 int pd2(int a[5][5],int s)
    23 {
    24     int v=0;
    25     for(int i=0;i<5;i++)
    26         for(int j=0;j<5;j++)
    27         if(a[i][j]!=ans[i][j])
    28         {
    29             v++;
    30             if(v+s>k)return 0;
    31         }
    32     return 1;
    33 }
    34 void dfs(int s,int a[5][5],int x,int y)
    35 {
    36     if(s==k)
    37     {
    38         if(pd1(a))flag=1;
    39         return;
    40     }
    41     if(flag==1)return;
    42     for(int i=0;i<8;i++)
    43     {
    44         int dx=x+xx[i],dy=y+yy[i];
    45         if(dx<0||dx>4||dy<0||dy>4)
    46             continue;
    47         swap(a[x][y],a[dx][dy]);
    48         if(pd2(a,s))dfs(s+1,a,dx,dy);
    49         swap(a[x][y],a[dx][dy]);
    50     }
    51 }
    52 int main()
    53 {
    54     scanf("%d",&tt);
    55     while(tt--)
    56     {
    57         int a[5][5];int x,y;
    58         memset(a,0,sizeof(a));
    59         for(int i=0;i<5;i++)
    60         {
    61               char s[10];scanf("%s",s);
    62               for(int j=0;j<5;j++)
    63                   if(s[j]=='*')a[i][j]=2,x=i,y=j;
    64                   else a[i][j]=s[j]-'0';
    65         }
    66         for(k=1;k<=15;k++)
    67         {
    68             dfs(0,a,x,y);
    69             if(flag)
    70             {
    71                 printf("%d
    ",k);
    72                 break;
    73             }
    74         }
    75         if(!flag)printf("-1
    ");
    76         else flag=0;
    77     }
    78     return 0;
    79 }
  • 相关阅读:
    Postman生成随机数(4)
    Postman参数化(3)
    Postman主界面介绍(2)
    Postman安装与介绍(1)
    Scuba数据库漏洞扫描工具--安装与使用
    Jmeter(八)Linux上安装与使用
    Jmeter(七)生成测试报告(Windows)
    理解动态字符串SDS
    csp复习笔记?
    ORM
  • 原文地址:https://www.cnblogs.com/HugeGun/p/5151519.html
Copyright © 2011-2022 走看看