搜索算法(一)
一类基于启发式搜索的激励学习算法

O 引 言 在人工智能的搜索方法中, 启发式搜索是一类重要 的 搜索方法。它通过评估 函数来计算代价 , 以寻找最优的搜 索方法u 。比如 , 算法就是一种典型的启发式搜索算 J A*
法 , 遍应 用于博 弈 、 被普 电脑游 戏 的 A 设 计 等等 。启 发式 I
与激励学习算法结合起来 , 通过实验对 比可知, 这样可以
h uitcsac n eno cm e tlann r o p rda dacaso eno cme tla igag r m nh uit erh to u e e rsi erh a d rifre n rig aecm ae n ls frif re n r n loi e en m o e rsi sac i i rd cd. c sn Th rl n r e prc lrs l s o ct ta t ep eiu . ep ei ay m i a e ut h wsb!日 h n h rvo s mi i t Ke s h u it er h;eno cme tl /n H —SA】SA yw : e r i sa c rifre n  ̄rf g; sc i R
维普资讯
第
6 期 2 0 8 月 06 年
计 算 机 技 术 与 发 展
OD P E EC M UT R T HNOL GY A O ND V OP Dห้องสมุดไป่ตู้ EL ME T N
v 16 o8 o1 . N .
Au g. 2 0 0 6
取得不 错的效 果 。
l 激 励 学 习及 其算 法
激励学 习是最 近研 究 较 多 的一 种 机 器学 习方 法 。激 励学 习和传 统 的监 督 学 习 的不 同在 于 : 在激 励 学 习 中 , 智
c语言中的算法

c语言中的算法C语言是一种广泛使用的编程语言,它具有强大的算法实现能力。
算法是解决问题的一种有序的方法和步骤,它可以应用于不同的领域,如排序、搜索、图形处理等。
本文将介绍C语言中常见的一些算法。
我们来看排序算法。
排序算法是将一组数据按照特定的顺序进行排列的过程。
在C语言中,常见的排序算法有冒泡排序、选择排序、插入排序、快速排序等。
冒泡排序是一种简单的排序算法,它通过不断地比较相邻两个元素的大小,将较大的元素逐步交换到数组的末尾。
选择排序是一种简单但低效的排序算法,它通过不断选择最小的元素并将其放置在正确的位置上来排序。
插入排序是一种将待排序序列分为已排序和未排序两部分的排序算法,它通过依次将未排序序列中的元素插入到已排序序列的正确位置上来排序。
快速排序是一种非常高效的排序算法,它通过选择一个基准元素,然后将待排序序列不断地分割成较小和较大两部分,并对这两部分进行递归排序,最后将结果合并起来。
我们来看搜索算法。
搜索算法是在一个数据集中查找某个特定元素的过程。
在C语言中,常见的搜索算法有线性搜索、二分搜索、哈希表等。
线性搜索是一种简单但低效的搜索算法,它通过遍历整个数据集来寻找目标元素。
二分搜索是一种高效的搜索算法,它要求数据集是有序的,并通过不断将数据集分成两半来查找目标元素。
哈希表是一种通过将关键字映射到一个唯一的索引位置来快速查找元素的数据结构,它在C语言中可以通过使用散列函数和数组来实现。
然后,我们来看图形处理算法。
图形处理算法是对图像进行处理和分析的算法。
C语言中常见的图形处理算法有图像滤波、边缘检测、图像压缩等。
图像滤波是一种通过对图像的像素进行重新计算来改变图像外观的算法,它可以用于去除噪声、增强图像细节等。
边缘检测是一种用于检测图像中边缘的算法,它通过寻找图像中亮度变化较大的区域来定位边缘。
图像压缩是一种通过减少图像数据的存储空间来减小图像文件大小的算法,它可以通过舍弃冗余信息和使用压缩编码技术来实现。
chapter4 数据集合上的搜(Searching)算法 94页

L j { k i : 1 i jak l n k i k j d fa o l i l r s lt u h k l c k j } a
即kl是所有的先于ki输入并小于kj的值。
则从根到y(y->key=kj)的路径上,结点的关键字集合恰为 Gj∪Lj,且d(kj,T)=|Gj|+|Lj|。
2
4.1 动态数据集(Dynamic Set)与抽象 数据类型(ADT)
静态数据集(Static Set)中的数据是固定不变的。 动态数据集(Dynamic Set)则是由不断变动的同类型数据元 素组成的数据集合。
动态数据集(Dynamic Set)可以表示为一个数据元素的数组:
class DynamicSet { int setSize; Object[arraySize] elements; ...
}
更为灵活的存储形式是利用指针和链表(例如线性链表和树 结构),这种存储形式在搜索算法中经常用到。
4
搜索问题:在集合中检索出其关键字域的值等于给定值的数 据元素。
已知:动态数据集类型DynamicSet的一个实例set和值x。 求:集合set中一个元素Object element,使element.key = x。
4.2.3 插入与删除操作
动态数据集上的Insert(S,x)、Delete(S,x)操作与查询操作不同, 它们会引起二叉搜索树本身的变化。 插入操作算法Tree_Insert
12
Fig.4.3表示把新的数据项14(关键字值为14)作为新结点插 入到二叉搜索树的过程。
13
从二叉搜索树中删除一个结点的算法比较复杂,假定待删除 结点指针z不为NULL,有三种情形:
路径搜索算法在游戏中的应用及改进

路径搜索算法在游戏中的应用及改进游戏开发领域中,路径搜索算法是一个非常重要的部分。
主要用于实现游戏中角色的移动、寻路、避障等功能。
在这篇文章中,我们将会介绍一些常见的路径搜索算法,并讨论如何对其进行改进,以适应不同类型的游戏。
一、常见的路径搜索算法1. Dijkstra算法Dijkstra算法最初是用于解决单源最短路径问题的。
但是在游戏中,我们通常使用它来找到角色移动的最短路径。
这个算法的思路非常简单,从起点出发,不断找到与起点距离最短的那个节点,并将其标记为已访问过。
然后再以这个节点为中心,继续寻找距离最短的节点,如此往复,直到找到目的地。
2. A*算法A*算法比Dijkstra算法更加高效,因为它可以利用启发式函数来指导搜索方向。
启发函数通常是基于目的地的距离和当前节点到目的地的估计距离进行计算的。
通过将距离和估计距离相加,找到当前节点与目的地之间最小的路径,这也就是A*算法优于其他算法的地方。
3. BFS算法BFS算法是一种基于层级的搜索算法。
它的思路是先访问起点,然后访问与起点相邻的节点,并将它们加入队列中。
接下来依次访问队列中的节点,并将其邻居节点加入队列中。
如此往复,直到访问到目的地。
二、路径搜索算法的改进在不同类型的游戏中,我们需要使用不同的路径搜索算法。
有些游戏中,需要处理大量角色的运动,这时候Dijkstra算法或者A*算法可能会比较慢。
而在一些动作游戏中,需要精确控制角色的运动,这时候就需要使用更加高效的算法。
1. 公平性算法在一些游戏中,我们需要处理大量角色的运动,这些角色也很容易相互干扰。
公平性算法就是为了解决这个问题而设计的。
它可以在保证所有角色都能达到目的地的前提下,让他们尽可能地避开其他角色。
2. 高效算法在一些动作游戏中,需要达到更高的运动速度。
这时候,Dijkstra算法或者A*算法可能会显得有些慢了。
所以,我们需要使用更加高效的算法。
一个思路是把搜索空间进行预处理,这样就可以非常快地找到任意两个位置之间的路径了。
计算机的基本算法

计算机的基本算法在计算机科学领域,算法是一组用于解决特定问题的指令和规则。
它们是计算机系统实现各种功能和任务的基础。
本文介绍和探讨了计算机的基本算法,包括排序算法、搜索算法和图算法。
一、排序算法排序算法是计算机科学中最基本和常用的算法之一。
它们的作用是将一组无序的数据按照升序或降序进行排列。
以下介绍几种常见的排序算法:1. 冒泡排序冒泡排序是一种通过多次比较和交换来实现排序的算法。
它的基本思想是从第一个元素开始,依次比较相邻的两个元素,如果它们的顺序不对则进行交换,直到达到整体有序的状态。
2. 插入排序插入排序是一种在已排序序列中插入新元素的排序算法。
它的基本思想是将待排序的数据分为已排序和未排序两部分,每次从未排序中取出一个元素,在已排序序列中找到合适的位置插入,保证每次插入后已排序序列仍然有序。
3. 快速排序快速排序是一种高效的排序算法,它采用分治的思想。
它的基本思想是选择一个基准元素,通过一趟排序将原数据划分为两部分,左边部分的元素都小于基准元素,右边部分的元素都大于基准元素,然后递归地对左右两部分进行排序。
二、搜索算法搜索算法是在给定数据集中查找特定元素或信息的算法。
以下介绍几种常见的搜索算法:1. 顺序搜索顺序搜索是一种逐个遍历数据元素进行匹配的搜索算法。
它的基本思想是从数据的第一个元素开始,依次和目标元素进行比较,直到找到匹配的元素或者遍历完整个数据集。
2. 二分搜索二分搜索是一种在有序数据集中查找目标元素的算法。
它的基本思想是将数据集分为两部分,判断目标元素可能在哪一部分,然后递归地在相应的部分中进行搜索,缩小搜索范围直至找到目标元素或确定不存在。
三、图算法图算法是用于解决图结构相关问题的算法。
图是由节点和边组成的数据结构,常用于表示多个对象之间的关系。
以下介绍几种常见的图算法:1. 广度优先搜索广度优先搜索是一种遍历图的算法,它从指定的起始节点开始,逐层扩展搜索到的节点,直到没有未搜索的节点为止。
第3章(搜索推理技术1-图盲目搜索)

①、起 始节点 ( 即根
节点)的深度为0。
②、任何其它节点的
深度等于其父辈
节点深度加上1。
深度优先搜索的基本
思路:
先扩展最深的节点 。
当出现没有后继节点
时,换到旁边的次深
节点
后生成的节点画在左边
含有深度界限的深度优先搜索算法:
① 把起始节点 S 放到未扩展节点的 OPEN 表中。 如果此节点为一目标节点,则得到解 ② 如果 OPEN 为一空表,则无解、失败退出
状态:长度为9的一维数组
(q1 , q2 , … , q9 )
其中,qi 取 0 , 1 , … , 8 个数,0 表示空格,且取值
互不相同
如果记空格的位置为P,这时空格的移动规则是: 1 4 7 2 5 8 3 6 9 数字表示位置 1 2 3 4 5 6 7 8 9 P-3
P-1
P
P+1
P+3
起始节点的父节点标志和操作符:
不作记录或记录为负
搜索过程(按照程序运行方式)
① 起始节点放到OPEN表
2 8 3 1 0 4
2 8 3 1 4 7 6 5 7 6 5
② OPEN不为空,继续
③ 将第一个节点 n 从 OPEN 表中移出,并放到 CLOSED表中 OPEN表
CLOSED表 1 0 0 2 8
13
14
1
4
2
8
8
3
3
0
1
2
4
1
5
4
7
7
0
6
6
5
1 8
7
2
3 4
14 15 15
16 16
3 2 4
计算机算法种类
计算机算法种类计算机算法是一种解决特定问题的、精确而完整的指令集合。
根据问题的不同性质,计算机算法分为多种不同的类型。
本文将介绍几种常见的计算机算法类型。
1. 搜索算法搜索算法旨在从大量数据中找出满足特定条件的目标。
其中,线性搜索算法是最简单的搜索算法,它按顺序逐个检查每个元素,直到找到所需的目标。
二分搜索算法则是一种更高效的搜索算法,它将数据划分为两个部分,并在每次比较后剔除一半的数据,最终找到目标。
搜索算法在信息检索、数据挖掘以及人工智能等领域有广泛应用。
2. 排序算法排序算法是将一组数据按特定顺序重新排列的算法。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序等。
这些算法根据不同的比较和交换策略,在时间复杂度和空间复杂度上有所差异。
排序算法在数据库查询、数据分析和图像处理等领域起到重要作用。
3. 图算法图算法是针对图结构的算法。
图是一种由节点和连接这些节点的边组成的数据结构。
图算法解决的问题包括最短路径问题、最小生成树问题和网络流问题等。
其中,迪杰斯特拉算法和弗洛伊德算法可用于求解最短路径问题,基于广度优先搜索的普利姆算法和克鲁斯卡尔算法可用于求解最小生成树问题。
4. 动态规划算法动态规划算法是通过将问题分解为重叠子问题,并利用已解决的子问题的解来构建更大问题的解。
该算法主要用于解决最优化问题。
动态规划算法通常涉及到状态转移方程的设计,并通过填表法或递归方法求解。
动态规划算法在背包问题、最长公共子序列和最优路径等问题上有广泛应用。
5. 贪心算法贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法。
贪心算法不考虑全局最优解,而是通过局部最优解的选择来得到更接近最优解的结果。
然而,贪心算法有时无法保证全局最优解,因此在设计上需要谨慎权衡。
贪心算法常用于任务调度、无线传感器网络和哈夫曼编码等问题。
6. 回溯算法回溯算法是一种通过尝试所有可能解并进行回溯的算法。
它通常用于求解组合问题、排列问题和背包问题等。
一种混合麻雀搜索算法
本栏目责任编辑:梁书计算机工程应用技术一种混合麻雀搜索算法李敦桥(贵州航天控制技术有限公司,贵州贵阳550009)摘要:元启发式算法由于可产生多样的解决方案在科学及工业领域受到了广泛的应用,麻雀搜索算法(SSA )是一种相对新颖的基于群体的元启发式算法,已被证明具有较好的寻优求解性能。
由于在某些情况下麻雀种群多样性不足,导致算法寻优精度低,易陷入局部最优,因此提出了一种混合麻雀搜索算法(HSSA ),首先利用反向对立学习策略提高初始种群质量,其次混合了模拟退火算法的Metropolis 准则,避免算法陷入局部最优。
为了验证算法的性能,利用HSSA 对多个单峰和多峰测试函数进行求解,实验结果表明,与WOA 、SSA 和IPSO 相比,HSSA 具有更快的收敛速度和更高的求解精度。
关键词:麻雀搜索算法;反向对立学习;Metropolis 准则;混合算法;函数优化中图分类号:TP18文献标识码:A文章编号:1009-3044(2021)05-0232-03开放科学(资源服务)标识码(OSID ):A Hybrid Sparrow Search Algorithm LI Dun-qiao(Guizhou Aerospace Control Technology Co.,Ltd.,Guiyang 550009,China)Abstract:Meta-heuristic algorithm has been widely used in science and industry because it can produce a variety of solutions.The sparrow search algorithm (SSA)is a relatively new population-based meta-heuristic algorithm,which has been proved to have good performance in optimization.Due to the insufficient diversity of sparrow population in some cases,the optimization precision of the algorithm is low and it is easy to fall into the local optima.Therefore,the hybrid sparrow search algorithm (HSSA)is proposed,which firstly improves the initial population quality by using the Opposition-based learning strategy,and secondly the algorithm mixes the Metropolis criterion of simulated annealing algorithm to avoid the algorithm falling into local optimal.In order to verify the performance of the algorithm,HSSA was used to solve some unimodal and multimodal test functions.The experimental results show that compared with WOA,SSA and IPSO,the proposed HSSA has faster convergence rate and higher solution accuracy.Key words:sparrow search algorithm;opposition-based learning;metropolis criterion;hybrid algorithm;function optimization群智能优化算法已被广泛应用于现实生活中各种优化问题求解,通过模仿飞蛾、蜜蜂、狼和鸟类等自然界各种物理或生物行为构造出数学模型,利用多次迭代获取最佳解决方案[1-3]。
蒙特卡罗树搜索算法的应用
蒙特卡罗树搜索算法的应用随着人工智能技术的快速发展,各种算法也不断涌现。
其中蒙特卡罗树搜索算法就是一种非常实用的算法。
这种算法被广泛应用于棋类游戏、自动驾驶、机器人等方面。
本文将介绍蒙特卡罗树搜索算法的基本原理、应用及优势。
一、蒙特卡罗树搜索算法的基本原理蒙特卡罗树搜索算法是一种通过模拟随机事件来得到问题解决方案的方法。
它通常用于求解那些难以找到确定性答案的问题。
蒙特卡罗树搜索算法的基本过程分为以下四个步骤:1. 随机模拟:随机模拟是蒙特卡罗树搜索算法的核心步骤。
它的基本思想是通过随机模拟事件的结果来估计事件的概率。
例如,在围棋游戏中,随机模拟就是让计算机随机下棋,模拟完成后统计获胜次数以及最终的胜率等信息。
2. 构建搜索树:在随机模拟之前,需要首先构建搜索树。
搜索树包括树根节点,各种可能的棋子位置以及对应的胜率节点。
3. 执行单步搜索:执行单步搜索一般通过选择搜索树中的节点,来确定下一步应该执行哪个行动。
4. 更新搜索树:一旦完成了单步搜索,就需要更新搜索树,以反映新的胜率信息。
基于以上四个步骤,蒙特卡罗树搜索算法可以根据当前的搜索树结构,以及之前经验的胜率信息来评估不同行动的优劣,从而获得较优的策略。
二、作为一种优秀的算法,蒙特卡罗树搜索算法在各个领域被广泛应用。
下面我们分别介绍其在围棋、自动驾驶以及机器人领域的应用。
1. 围棋领域围棋是一种棋类游戏,与其他的棋类游戏不同,它的搜索空间非常大。
由于搜索空间的复杂性,围棋一直以来被认为是人工智能领域中最具挑战性的问题之一。
而蒙特卡罗树搜索算法就是在这种背景下应运而生的。
随着AlphaGo 等围棋人工智能的问世,蒙特卡罗树搜索算法在围棋领域的应用也取得了巨大的成功。
2. 自动驾驶领域随着人工智能技术的不断发展,自动驾驶已经成为一个备受关注的领域。
在自动驾驶领域,蒙特卡罗树搜索算法被广泛应用于路径规划以及交通流优化等方面。
例如,在一个高速公路上,蒙特卡罗树搜索算法可以模拟车辆的转向、加速以及制动等行为,并且计算出最优的路线,从而提高车辆的安全性以及驾驶效率。
三步搜索算法
三步搜索算法%%%%%%%%%%三步搜索算法%%%%%%%%%%function [motionVect, TSScomputations] = motionEstTSS(imgP, imgI, mbSize, p)[row col] = size(imgI);vectors = zeros(2,row*col/mbSize^2);costs = ones(3, 3) * 65537;computations = 0;L = floor(log10(p+1)/log10(2));stepMax = 2^(L-1);mbCount = 1;for i = 1 : mbSize : row-mbSize+1for j = 1 : mbSize : col-mbSize+1x = j;y = i;costs(2,2) = costFuncMAD(imgP(i:i+mbSize-1,j:j+mbSize-1), ... imgI(i:i+mbSize-1,j:j+mbSize-1),mbSize);computations = computations + 1;stepSize = stepMax;while(stepSize >= 1)for m = -stepSize : stepSize : stepSizefor n = -stepSize : stepSize : stepSizerefBlkVer = y + m; refBlkHor = x + n;if ( refBlkVer < 1 || refBlkVer+mbSize-1 > row ...|| refBlkHor < 1 || refBlkHor+mbSize-1 > col)continue;endcostRow = m/stepSize + 2;costCol = n/stepSize + 2;if (costRow == 2 && costCol == 2)continueendcosts(costRow, costCol ) =costFuncMAD(imgP(i:i+mbSize-1,j:j+mbSize-1), ...imgI(refBlkVer:refBlkVer+mbSize-1, refBlkHor:refBlkHor+mbSize-1), mbSize);computations = computations + 1;endend[dx, dy, min] = minCost(costs);x = x + (dx-2)*stepSize;y = y + (dy-2)*stepSize;stepSize = stepSize / 2;costs(2,2) = costs(dy,dx);endvectors(1,mbCount) = y - i; vectors(2,mbCount) = x - j;mbCount = mbCount + 1;costs = ones(3,3) * 65537;endendmotionVect = vectors;TSScomputations = computations/(mbCount - 1);mbSize = 16;p = 7;%YUV格式视频-分辨率352*288,共300帧dims=[352 288];numfrm=300;startfrm=100;[Y,U,V]=yuv_import('hall_monitor_cif.yuv',dims,numfrm,startfrm);imgI = imread('多媒体32.jpg');imgI = rgb2gray(imgI);imgP = imread('多媒体33.jpg');imgP = rgb2gray(imgP);figure,imshow(imgI);title('当前帧');figure,imshow(imgP);title('参考帧');[r,c] = size(imgI);%%%%三步搜索算法%%%%%%%%%%[motionVect, TSScomputations] = motionEstTSS(imgP, imgI, mbSize, p); %绘制运动矢量图a = zeros(1,r*c/mbSize^2);a(:) = motionVect(1,1:r*c/mbSize^2);b = zeros(1,r*c/mbSize^2);b(:) = motionVect(2,1:r*c/mbSize^2);for i = 1:r/mbSizefor j = 1:c/mbSizemvx(i,j)=b(1,j+(i-1)*(c/mbSize));%运动矢量的X坐标mvy(i,j)=-a(1,j+(i-1)*(c/mbSize));%运动矢量的Y坐标endendfigure;quiver(flipud(mvx),flipud(mvy));%flipud函数上下翻转矩阵title('运动矢量图');set(gca,'XLim',[-1,c/mbSize+2],'YLim',[-1,r/mbSize+2]);%绘制预测帧imgComp = motionComp(imgI,motionVect,mbSize);I1 = uint8(imgComp);figure;imshow(I1);title('预测帧');%绘制残差图canc = zeros(r,c);for i = 1:rfor j = 1:ccanc(i,j) = 255 - abs(imgP(i,j)-imgComp(i,j));endend。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
素数环(prime.pas/c/cpp)
【问题描述】将1~n这n个数字首尾相连,形成一个圆环,要求圆环上任意两个相邻的数
字之和都是一个素数,请编程输出符合条件的素数环。
【输入数据】输入数据仅一行,包含一个正整数n(n<=20)。
【输出数据】输出数据最多包括10行,每行由n个整数组成,表示前十个符合条件的素数
环(不足十个时全部输出)。所有素数环第一个元素必须是1,且按照从小到大的顺序排列。
【输入样例】
prime.in
6
【输出样例】
prime.out
1 4 3 2 5 6
1 6 5 2 3 4
分书问题(book.pas/c/cpp)
【问题描述】已知有n本书(从1~n编号)和n个人(从1~n编号),每个人都有一个自
己喜爱的书的列表,现在请你编写一个程序,设计一种分书方案,使得每个人都能获得一本
书,且这本书一定要在他的喜爱列表中。有多种方案时,使编号小的人获得的书本的编号最
小。
【输入数据】输入数据共若干行,第一行为一个正整数n(n <= 20),从第2行到第n+1行,
每行有n个0或1组成,第k行表示编号为k-1的人对这n本书的喜好列表,0表示不喜欢,
1表示喜欢。
【输出数据】输出数据仅一个整数,表示符合条件的分配方案的总数。
【输入样例】
book.in
5
00110
11001
01100
00010
01001
【输出样例】
book.out
1
倒牛奶(milk.pas/c/cpp)
【问题描述】有三个容量分别是A,B,C升的桶,最初,A和B桶都是空的,而C桶是装
满牛奶的。有时,我们需要把牛奶从一个桶倒到另一个桶中,每一次的倒奶过程都以原始桶
空或目标桶满为结束,且倒奶过程中不会产生任何的浪费。现在请你编写一个程序,判断当
A桶是空的时候,C桶中牛奶量的所有可能性。
【输入数据】输入数据仅一行,包括三个用空格隔开的整数A、B和C(1<=A、B、C<=20),
分别表示A、B、C三个桶的容量。
【输出数据】输出数据仅一行,包括若干个用空格隔开的整数,表示A桶为空时C桶中牛
奶量的所有可能性。
【输入样例】
milk.in
8 9 10
【输出样例】
milk.out
1 2 8 9 10
题4、密码锁(lock)
【问题描述】有一种全新的密码锁,该密码锁上有9个数字转轮(用字母A~I表示),每
个数字转轮上只有0~3四个数字。与普通密码锁不同的是,该密码锁不允许用户直接转动
数字转轮,用户必须通过密码锁上的9个特定按钮来完成开锁的操作。每按动一下按钮,
都会使得这些数字轮中的某几个数字轮转动一下(数字轮每转动一下,其显示的数字会按照
0→1→2→3→0的顺序变化),下表列出了每个按钮所影响到的数字轮序号。
按钮 影响的数字轮 按钮 影响的数字轮 按钮 影响的数字轮
1 ABDE 4 ADG 7 DEGH
2 ABC 5 BDEFH 8 GHI
3 BCEF 6 CFI 9 EFHI
现在已知该密码锁的当前状态,请你计算要复位该密码锁(使9个数字轮都显示“0”)
至少需要按动多少次按钮。
【输入数据】输入数据仅一行,包含9个用空格隔开的0~3之间的数字,表示密码锁当前
的状态。
【输出数据】输出数据仅一个整数,表示要将密码锁复位至少需要按动按钮的次数。
【输入样例】 lock.in 3 3 0 2 2 2 2 1 2 【输出样例】 lock.out 4 【样例说明】
第一次:按钮4,状态变为0 3 0 3 2 2 3 1 2
第二次:按钮5,状态变为0 0 0 0 3 3 3 2 2
第三次:按钮8,状态变为0 0 0 0 3 3 0 3 3
第四次:按钮9,状态变为0 0 0 0 0 0 0 0 0