找出Android锁定模式
假设您看到您的朋友在他们的Android手机中输入了他或她的密码。您不记得他们是如何制作图案的,但是您仍然记得图案的外观。作为您关心的朋友,您想知道他们的密码有多安全。您的工作是计算形成特定图案的所有方式。 Android模式如何运作 模式是在3x3的节点网格上绘制的。在一种模式中,无需访问屏幕即可访问一系列节点。他们访问的每个节点都通过一条边连接到前一个节点。要记住两个规则。 您最多只能访问一个节点 边缘可能无法通过未访问的节点 请注意,尽管通常很难执行,因此在实际的android锁组合中并不常见,但可以像Knight一样移动。即,可以从一侧移动到不相邻的拐角处或以另一种方式移动。这是采用此举的两种模式示例: 这是正在执行的动画Gif。 解决模式 典型的模式可能如下所示: 对于这种简单的模式,有两种方法可以绘制两种模式。您可以从两个松散的一端开始,然后穿过突出显示的节点到达另一个节点。尽管对于许多模式而言都是如此,但对于人类通常采用的模式而言,并非对所有模式都如此。 考虑以下模式: 有两种立即可识别的解决方案。从左上方开始的一个: 还有一个从底部中心开始: 但是,因为一旦选择了一条线,就允许它通过一个点,因此从顶部中间开始有一个附加的花样: 这个特定的模式有3个解决方案,但是模式可以有1到4个解决方案之间的任何位置[需要引用]。 以下是每个示例的一些示例: 1。 2。 3。 4。 输入输出 节点可以表示为零到九之间的整数,它们的等效字符串或a到i(或A到I)的字符。每个节点必须具有这些集合之一中的唯一表示。 解决方案将由包含节点表示形式的有序容器表示。节点的顺序必须与传递顺序相同。 模式将由节点对的无序容器表示。每对代表一条开始连接该对中两个点的边。模式表示不是唯一的。 您将通过标准输入方法将模式表示作为输入,并通过标准输出方法输出创建相同模式的所有可能解决方案。 您可以假设每个输入将至少具有一个解决方案,并将连接至少4个节点。 如果您愿意或被语言选择所迫,则可以选择使用有序容器代替无序容器。 测试用例 节点按以下模式排列: 0 1 2 3 4 5 6 7 8 让我们{...}成为一个无序的容器,[...]成为一个有序的容器,然后(...)成为一对。 以下输入和输出应匹配 {(1,4),(3,5),(5,8)} -> {[1,4,3,5,8]} {(1,4),(3,4),(5,4),(8,5)} -> {[1,4,3,5,8]} {(0,4),(4,5),(5,8),(7,8)} -> {[0,4,5,8,7],[7,8,5,4,0]} {(0,2),(2,4),(4,7)} …