• bzoj 1054: [HAOI2008]移动玩具


     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 struct data
     5 {
     6     int a[4][4],bu;
     7 }q[100000];
     8 int h=0,t=1,f[1000000],b[4][4];
     9 char ch[8];
    10 int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0};
    11 int hash(int b[4][4])
    12 {
    13     int k=1,sum=0;
    14     for(int i=0;i<4;i++)
    15       for(int j=0;j<4;j++)
    16         {
    17             sum+=b[i][j]*k;
    18             k<<=1;
    19         }
    20     return sum;
    21 }
    22 int main()
    23 {
    24     for(int i=0;i<4;i++)
    25       {
    26         scanf("%s",ch);
    27         for(int j=0;j<4;j++)
    28           q[t].a[i][j]=ch[j]-'0';
    29       }
    30     for(int i=0;i<4;i++)
    31       {
    32         scanf("%s",ch);
    33         for(int j=0;j<4;j++)
    34           b[i][j]=ch[j]-'0';
    35       }
    36     int a1=hash(b);
    37     f[hash(q[h].a)]=1;
    38     for(;h<t;)
    39       {
    40         h++;
    41         int a2=hash(q[h].a);
    42         if(a2==a1)
    43           break;
    44         for(int i=0;i<4;i++)
    45           for(int j=0;j<4;j++)
    46             if(q[h].a[i][j]==0)
    47               for(int k=0;k<4;k++)
    48                 {
    49                     int nx=i+xx[k],ny=j+yy[k];
    50                     if(ny<4&&ny>=0&&nx<4&&nx>=0&&q[h].a[nx][ny])
    51                       {
    52                         t++;
    53                         q[t]=q[h];
    54                         swap(q[t].a[nx][ny],q[t].a[i][j]);
    55                         if(!f[hash(q[t].a)])
    56                           {
    57                             f[hash(q[t].a)]=1;
    58                             q[t].bu++;
    59                           }
    60                         else
    61                           t--;
    62                       }                 
    63                 }
    64       }
    65     printf("%d
    ",q[h].bu);
    66     return 0;
    67 }
    68 

    这是一个搜索。。。

  • 相关阅读:
    C语言(1)
    ​ Markdown
    多功能嵌入式解码软件(4)
    多功能嵌入式解码软件(3)
    多功能嵌入式解码软件(2)
    STM32最小系统设计
    C#通过字符串分割字符串Split
    基于串口的SD_card系统
    直流无刷电机工作原理
    Java常用函数式接口--Consumer接口使用案例
  • 原文地址:https://www.cnblogs.com/xydddd/p/5232792.html
Copyright © 2020-2023  润新知