不过黑点连线的程序解法

大家都见过下题吧,本人试图连过几次,发现不可能,猜测是无解的,最终写程序穷举,发现是无解的。当然根据图论,奇点跟偶点相差为2是不可能连接上的(再讨论),现列出我的PHP程序穷举法,用到了循环

操作方法

  • 01

    php文件代码如下: <?php $nodes = array( array(0,  1, 2, 3, 4), array(10,11,12,13,14), array(20,21,22,23,24), array(30,31,32,33,34), array(40,41,42,43,44), ); function nextNodes($node) { $next_nodes = array(); $next_nodes[] = $node + 10; $next_nodes[] = $node - 10; $next_nodes[] = $node + 1; $next_nodes[] = $node - 1; foreach($next_nodes as $key => $next_node){ if( $next_node<0 || $next_node>44 || $next_node==1 || $next_node%10>4) { unset($next_nodes[$key]); } } return $next_nodes; } $nextNodes = array(); //得到所有的次节点 foreach ($nodes as $rownum => $cols){ foreach($cols as $colnum => $node){ $nextNodes[$rownum][$colnum] = nextNodes($node); } } unset($nextNodes[0][1]); function connect($routes){ global $nextNodes; $new_routes = array(); $i = 0; foreach ($routes as $route){ $current = end($route); $next_nodes = $nextNodes[floor($current/10)][floor($current%10)]; foreach($next_nodes as $key => $node){ if(!in_array($node, $route)){ $new_routes[$i] = $route; $new_routes[$i][] =  $node; $i++; } } } return $new_routes; } $node = 0; foreach($nodes as $rownum => $rows) { foreach($rows as $colnum => $node){ //echo "\n\n"; if($node == 1) continue; $times = 2; $routes = array(array($node)); while($times < 25){ $routes = connect($routes); if(!empty($routes)){ //echo  "起始点为{$node}的{$times}个连接点的线有".count($routes)."种:\n"; foreach($routes as $key => $route){ // echo implode($route, '--')."\n"; } $times++; } else { echo "起始点为{$node}的{$times}个连接点的线没有\n"; break; } } } }

  • 02

    执行此文件(如果想看详细的内容,可将部分反注释)

  • 03

    运行结果: [root@dev sf_codes]# php lianlian.php 起始点为0的24个连接点的线没有 起始点为2的24个连接点的线没有 起始点为3的23个连接点的线没有 起始点为4的24个连接点的线没有 起始点为10的23个连接点的线没有 起始点为11的24个连接点的线没有 起始点为12的23个连接点的线没有 起始点为13的24个连接点的线没有 起始点为14的23个连接点的线没有 起始点为20的24个连接点的线没有 起始点为21的23个连接点的线没有 起始点为22的24个连接点的线没有 起始点为23的23个连接点的线没有 起始点为24的24个连接点的线没有 起始点为30的23个连接点的线没有 起始点为31的24个连接点的线没有 起始点为32的23个连接点的线没有 起始点为33的24个连接点的线没有 起始点为34的23个连接点的线没有 起始点为40的24个连接点的线没有 起始点为41的23个连接点的线没有 起始点为42的24个连接点的线没有 起始点为43的23个连接点的线没有 起始点为44的24个连接点的线没有

(0)

相关推荐

  • 华为手机如何线刷官方固件

    操作方法 01 首先进入华为官网,选择右侧的技术支持. 02 你可以输入你的手机型号或者通过右边的类别进行选择 (这里以A199为例) 03 左侧直接输入型号 右侧选择型号 选择好你的型号后进入下载! ...

  • VIVO x9手机黑屏卡机怎么办,线刷教程

    vivo x9手机黑屏卡机怎么办?vivo x9手机死机开不了机怎么办?以下这套线刷教程适用于大部分vivo手机,希望能帮到大家. 操作方法 01 第一步打开刷机软件,然后界面会提示连接手机.这时只要 ...

  • 什么是BIOS 怎么进入bios,bios设置图解教程(BIOS和CMOS的区别)

    所谓"BIOS"就是"Basic Input Output System"(基本输入输出系统)的缩写,它是电脑系统非常重要的一部分,在用户打开电脑电源之后,系统可以工作,完全都要依靠存在ROM中的BI ...

  • BIOS设置完全教程

    对于计算机爱好者来说BIOS设置是最基本、最常用的操作技巧,是计算机系统最底层的设置,对我们的计算机性能有着很大的影响,但是由于我们大家使用的主板不同,我们的BIOS具体设置项目也不同,大家可以自己根 ...

  • 碳粉知识大全

    一、 碳粉的规格 HP硒鼓型号 容量 适 用 机 型 C4129X 500g HP LaserJet 5000/5000n/5000GN C3903A 220g HP LaserJet 5P/5MP/ ...

  • BIOS设置图解教程 图文

    BIOS(basic input output system 即基本输入输出系统)设置程序是被固化到计算机主板上的ROM芯片中的一组程序,其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。BI ...

  • 怎么进入bios设置?

    怎么进入bios设置? 一般来说目前的绝大多数主板都是通过在开机自检时按键盘上的"DEL"键进入BIOS的,笔记本常见的是F1/F2/F10,开机自检时留意画面上的提示即可. 开机 ...

  • 什么是coms coms设置图解

    对与经常玩电脑的朋友来说,对与BIOS.COMS可能有点陌生,对于经常修电脑的朋友来说COMS可能会经常接触,今天我们来简单的说下coms设置图解,什么是COMS呢?coms主要是用于存储BIOS设置 ...

  • miflash找不到设备 无法开机

    小米手机的用户,当你不能用recovery进行卡刷时,你就会选择线刷(线刷的教程详小米网),这时我们要用到miflash(小米的线刷程序,到小米网下),但有时miflash偏偏找不到设备,这时该怎么办 ...