zoukankan      html  css  js  c++  java
  • 分享个好玩的算法游戏

    笔者简介:

    从小就不是个勤奋的孩子,一般事情都保持中游水平。对事情也没穷极的精神,所以我更喜欢听别人分享事情,从而去发现别人身上的优点。

    如果用三分钟热度来形容我再恰当不过了,我会把应该做的事做好至于其他的?。。看心情!

    很羡慕那些有思想有作为的人,在我看来他们很有‘正事’,当然我也会慢慢的向那个方向发展,尽管需要时间的沉淀(哈哈)

    作为众多程序猿中妹纸,我决定为自己起个艺名,不,笔名!为了展现我们团队中不同的性格,我也建议大家在写的时候注明自己的艺名!

    那么问题来了,浏览Iteye时看到的问题,顺便边研究边给大家献丑。。。

    〇  X  〇 〇 〇

    〇 〇 〇 〇 〇

    〇 〇 〇 〇 〇

    〇 〇 〇 〇 〇

    〇 〇 〇 〇 〇

    不过X点,把所有的圈连起来,不能重复,不能斜连,不能跳圈

    第一步:我把这个图变成程序可看懂的语言

    11 12 13 14 15
    21 22 23 24 25
    31 32 33 34 35
    41 42 43 44 45
    51 52 53 54 55

    第二步:设置了四个事件

    首先每个点有四个走的方向,我给设置了四个方向事件

    分别为:向上走、向下走、向左走、向右走

    private function left($x, $y, $oldArr)
    {
        if($y > 1)
        {

          if(false == in_array($x.$y-1, $oldArr)    //判断此点是否走过

           {
              $oldArr[] = $x.$y-1;//记录走过的点
               return $x."-".$y-1;//返回下一个点

           }
        }
        return false;
    }
    private function right($x, $y, $oldArr)
    {
        if($y < 5)
        {

           if(false == in_array($x.$y+1, $oldArr)    

           {
              $oldArr[] = $x.$y+1;
               return $x."-".$y+1;

           }
        }
        return false;
    }
    private function up($x, $y, $oldArr)
    {
        if($x > 1)
        {

           if(false == in_array($x-1.$y, $oldArr)    

           {
            $oldArr[] = $x-1.$y;
            return $x-1."-".$y;

           }
        }
        return false;
    }
    private function down($x, $y, $oldArr)
    {
        if($x < 5)
        {

           if(false == in_array($x+1.$y, $oldArr)

          {
            $oldArr[] = $x+1.$y;//记录走过的点     

            return $x+1."-".$y;

          }
        }
        return false;
    }
    第三步:开始写试运行方法

    当起点固定以后,开始选择方向,当一个方向可走时,走到下一个点,然后继续选择方向,循环往复,直到所有点都走通为止。

     public function goTry($x, $y, $oldArr, $methods)                          
     {         

         $oldArr[] = $x.$y;                                            
         foreach($methods as $method)                       
         {   
             $next = $this->$method($x, $y, $oldArr);//循环走四个方向的可能性
             if(false == empty($next)) //如果此方向可走则继续,否则,走另一个方向
             {   
                 $xy = explode("-", $next);

                if($xy[0] != 1 && $xy[1] != 2) //12点处不能走

                {
                 goTry($xy[0], $xy[1]); //递归循环

                 }
             }        
         }            
     }                
    第四步写主方法:循环取调用

    public function AGame($request, $response)    
    {    

       $methods = array('left', 'right', 'up', 'down');                                        
        for($i=1;$i<=5;$i++)                      
        {                                         
            for($j=1; $j<=5; $j++)                
            {            

                //换不同的起点   

                if($i != 1 && $j != 2)

               {

                $oldArr = array();                     
                goTry($i, $j, $oldArr, $methods);

                if(count($oldArr) == 24)

                {

                  var_dump($oldArr);exit;

                }

                }
            }                                     
        }                                         
    }                                            

    以上算是我分享的过程,代码写的可能有很多不好的地方,但写算法还是挺有意思的一件事。像递归方法只听过也是首次真正的去用,有些知识了解没有用,当你真需要的时候估计不小心就想到了

    因为知道的知识甚少,上午看了个小游戏有点兴趣就写博客的过程边实现了下。。。

    最后注我的笔名                      ---小梦








            

  • 相关阅读:
    多种方式安装GitLabRunner
    rpm,docker,k8s三种方式安装部署GitLab服务
    利用curl命令访问Kubernetes API server
    在客户端电脑使用 kubectl 远程管理 Kubernetes
    利用 Nginx 反向代理搭建本地 yum 服务器
    Jenkins和Gitlab CI/CD自动更新k8s中pod使用的镜像说明
    1.在 Kubernetes 在快速安装 Harbor
    4.Gitlab CI 与 Kubernetes 的结合
    3.在 Kubernetes 上安装 Gitlab CI Runner
    2. 在 Kubernetes 上安装 Gitlab
  • 原文地址:https://www.cnblogs.com/newbalanceteam/p/4835894.html
Copyright © 2011-2022 走看看