zoukankan      html  css  js  c++  java
  • hdu5012 水搜索

    题意:
          给你一个正方体的初始状态和末状态,问你是否可以再6步之内转到这个状态,有四种转的方式,如果你面对的是正方向的正前方,那么转的方式就是 顺时针,逆时针,上,下。

    思路: 

          水搜索,直接搜就行,深搜广搜随意,mark不mark也随意,因为状态4,深度6那么最多也就4^6,题目没有坑点,细心点就行了,我写的是一个广搜(mark了)。


    #include<stdio.h>
    #include<queue>
    
    using namespace std;
    
    typedef struct
    {
       int now[7];
    }NODE;
    
    NODE xin ,tou;
    int mark[7][7][7][7][7][7];
    int ss[7] ,ee[7];
    
    int BFS()
    {
       memset(mark ,0 ,sizeof(mark));
       mark[ss[1]][ss[2]][ss[3]][ss[4]][ss[5]][ss[6]] = 1;
       queue<NODE>q; 
       for(int i = 0 ;i <= 6 ;i ++) xin.now[i] = ss[i];    
       q.push(xin);
       while(!q.empty())
       {
          tou = q.front();
          q.pop();
          int ok = 1;
          for(int i = 1 ;i <= 6 ;i ++) 
          if(tou.now[i] != ee[i]) ok = 0;
          if(ok) return tou.now[0];  
          if(tou.now[0] >= 6) continue;
          
          for(int i = 0 ;i <= 6 ;i ++) xin.now[i] = tou.now[i];
          xin.now[0] ++;
          xin.now[1] = tou.now[3] ,xin.now[3] = tou.now[2] ,xin.now[2] = tou.now[4] ,xin.now[4] = tou.now[1];
          if(!mark[xin.now[1]][xin.now[2]][xin.now[3]][xin.now[4]][xin.now[5]][xin.now[6]] ) q.push(xin);
          
          for(int i = 0 ;i <= 6 ;i ++) xin.now[i] = tou.now[i];
          xin.now[0] ++;
          xin.now[1] = tou.now[4] ,xin.now[4] = tou.now[2] ,xin.now[2] = tou.now[3] ,xin.now[3] = tou.now[1];
          if(!mark[xin.now[1]][xin.now[2]][xin.now[3]][xin.now[4]][xin.now[5]][xin.now[6]] ) q.push(xin);
          
          for(int i = 0 ;i <= 6 ;i ++) xin.now[i] = tou.now[i];
          xin.now[0] ++;
          xin.now[1] = tou.now[5] ,xin.now[5] = tou.now[2] ,xin.now[2] = tou.now[6] ,xin.now[6] = tou.now[1];
          if(!mark[xin.now[1]][xin.now[2]][xin.now[3]][xin.now[4]][xin.now[5]][xin.now[6]] ) q.push(xin);      
       
          for(int i = 0 ;i <= 6 ;i ++) xin.now[i] = tou.now[i];
          xin.now[0] ++;
          xin.now[1] = tou.now[6] ,xin.now[6] = tou.now[2] ,xin.now[2] = tou.now[5] ,xin.now[5] = tou.now[1];
          if(!mark[xin.now[1]][xin.now[2]][xin.now[3]][xin.now[4]][xin.now[5]][xin.now[6]] ) q.push(xin);
    
       }
       return -1;
    }
    
    int main ()
    {
       while(~scanf("%d %d %d %d %d %d" ,&ss[1] ,&ss[2] ,&ss[3] ,&ss[4] ,&ss[5] ,&ss[6]))
       { 
          for(int i = 1 ;i <= 6 ;i ++)
          scanf("%d" ,&ee[i]);
          ss[0] = ee[0] = 0;
          printf("%d
    " ,BFS());
       }
       return 0;
    }
    

  • 相关阅读:
    由于挂载的nfs存储目录掉下线,导致创建VM时,无法创建
    使用RVM更新Ruby 版本
    安装logstash+kibana+elasticsearch+redis搭建集中式日志分析平台
    Topic modeling【经典模型】
    [第1集] 课程目标,数据类型,运算,变量
    Juint test Case 的2种使用方式
    getJSON方式请求服务器
    Web项目改名的带来的404not found问题
    JavaWeb EL表达式, JSTL标签及过滤器综合学习
    HashMap的几种遍历方式(转载)
  • 原文地址:https://www.cnblogs.com/csnd/p/12062786.html
Copyright © 2011-2022 走看看