zoukankan      html  css  js  c++  java
  • ZOJ 3736 模拟魔方

    题意:
          2*2*2的魔方,给你一个初始状态,和一个限定步数,问你在这么多步数条件下最多能有多少面拼好,(不是累加关系,是某一个状态的最多,最多是6);


    思路:

         最多是7步,所以直接暴力搜索,第一次写,无脑写的,308行,结果超时了,sb了,哎!有从写了一下,就是找找转换规律,100多行ac,总之就是个水模拟,细心点,转换规律别写错了就行了...


    #include<stdio.h>
    #include<string.h>
    #include<queue>
    
    using namespace std;
    
    typedef struct
    {
       int a ,b;
    }SW;
    
    typedef struct
    {
       int now[25] ,t;
    }NODE;
    
    SW sw[5][15];
    NODE xin ,tou;
    
    void csh_sw()
    {
       sw[1][1].a = 4 ,sw[1][1].b = 6;
       sw[1][2].a = 5 ,sw[1][2].b = 7;
       sw[1][3].a = 6 ,sw[1][3].b = 8;
       sw[1][4].a = 7 ,sw[1][4].b = 9;
       sw[1][5].a = 8 ,sw[1][5].b = 23;
       sw[1][6].a = 9 ,sw[1][6].b = 22;
       sw[1][7].a = 23 ,sw[1][7].b = 4;
       sw[1][8].a = 22 ,sw[1][8].b = 5;
       sw[1][9].a = 1 ,sw[1][9].b = 0;
       sw[1][10].a = 3,sw[1][10].b = 1;
       sw[1][11].a = 2 ,sw[1][11].b = 3;
       sw[1][12].a = 0 ,sw[1][12].b = 2;
       
       sw[2][1].a = 1 ,sw[2][1].b = 7;
       sw[2][2].a = 3 ,sw[2][2].b = 13;
       sw[2][3].a = 7 ,sw[2][3].b = 17;
       sw[2][4].a = 13 ,sw[2][4].b = 19;
       sw[2][5].a = 17 ,sw[2][5].b = 21;
       sw[2][6].a = 19 ,sw[2][6].b = 23;
       sw[2][7].a = 21 ,sw[2][7].b = 1;
       sw[2][8].a = 23 ,sw[2][8].b = 3;
       sw[2][9].a = 9 ,sw[2][9].b = 8;
       sw[2][10].a = 15,sw[2][10].b = 9;
       sw[2][11].a = 14 ,sw[2][11].b = 15;
       sw[2][12].a = 8 ,sw[2][12].b = 14;
       
       sw[3][1].a = 2 ,sw[3][1].b = 8;
       sw[3][2].a = 3 ,sw[3][2].b = 14;
       sw[3][3].a = 8 ,sw[3][3].b = 17;
       sw[3][4].a = 14 ,sw[3][4].b = 16;
       sw[3][5].a = 17 ,sw[3][5].b = 11;
       sw[3][6].a = 16 ,sw[3][6].b = 5;
       sw[3][7].a = 11 ,sw[3][7].b = 2;
       sw[3][8].a = 5 ,sw[3][8].b = 3;
       sw[3][9].a = 6 ,sw[3][9].b = 7;
       sw[3][10].a = 7,sw[3][10].b = 13;
       sw[3][11].a = 13 ,sw[3][11].b = 12;
       sw[3][12].a = 12 ,sw[3][12].b = 6;
    
    }
    
    int maxx;
    void jude(NODE a)
    {
       int now = 0;
       if(a.now[0] == a.now[1] && a.now[1] == a.now[2] && a.now[2] == a.now[3])
       now ++;
       if(a.now[4] == a.now[5] && a.now[5] == a.now[10] && a.now[10] == a.now[11])
       now ++;
       if(a.now[6] == a.now[7] && a.now[7] == a.now[12] && a.now[12] == a.now[13])
       now ++;
       if(a.now[8] == a.now[9] && a.now[9] == a.now[14] && a.now[14] == a.now[15])
       now ++;
       if(a.now[16] == a.now[17] && a.now[17] == a.now[18] && a.now[18] == a.now[19])
       now ++;
       if(a.now[20] == a.now[21] && a.now[21] == a.now[22] && a.now[22] == a.now[23])
       now ++;
       if(maxx < now) maxx = now;
    }
    
    int T;
    void bfs()
    {
       queue<NODE>q;
       xin.t = 0;
       q.push(xin);
       maxx = 0;
       jude(xin);
       while(!q.empty())
       {
          tou = q.front();
          q.pop();
          jude(tou);
          if(maxx == 6) return;
          if(tou.t == T) continue;
          
          for(int i = 1 ;i <= 3 ;i ++)
          {
             xin = tou ,xin.t ++;
             for(int j = 1 ;j <= 12 ;j ++)
             xin.now[sw[i][j].a] = tou.now[sw[i][j].b];
             q.push(xin);
          }
          
          for(int i = 1 ;i <= 3 ;i ++)
          {
             xin = tou ,xin.t ++;
             for(int j = 1 ;j <= 12 ;j ++)
             xin.now[sw[i][j].b] = tou.now[sw[i][j].a];
             q.push(xin);
          }
       }
    }
    
    int main ()
    {
       int i;
       csh_sw();
       while(~scanf("%d" ,&T))
       {
          maxx = 0;
          for(i = 0 ;i <= 23 ;i ++)
          scanf("%d" ,&xin.now[i]);
          bfs();
          printf("%d
    " ,maxx);
       }
       return 0;
    }
          
          
          

  • 相关阅读:
    oracle数据库表导出
    oracle-11G转10G
    ORACLE-创建用户和表空间
    idea 自定义toString
    springboot整合 mybatis.generator
    Linux mysql8.0.11安装
    助教工作:关于如何使用python+excel快捷生成千帆竞发图
    升级MySQL至最新版本
    Zabbix与Zabbix-agent2部署
    Yarn 的使用
  • 原文地址:https://www.cnblogs.com/csnd/p/12063261.html
Copyright © 2011-2022 走看看