zoukankan      html  css  js  c++  java
  • FJUT第四周寒假作业之第一集,临时特工?(深度优先搜索)

    原网址:http://210.34.193.66:8080/vj/Contest.jsp?cid=163#P2

    第一集,临时特工?

    TimeLimit:1000MS  MemoryLimit:128MB
    64-bit integer IO format:%I64D
     
    Problem Description

    欲知前情如何,请看第十届福建工程学院校赛赛题。

     

    小A和小C正在私奔的路上,遇到一个前来追赶他们的特工,然而这个特工明显是个临时工,三下五除二就把特工打晕了,缴获了一部手机。小A和小C想要通过这个特工的手机获取情报,而这台手机有图案密码锁。大概由于这个特工比较健忘,手机的密码提示写了一排数字,小A根据数字滑动密码锁,却不能打开。

    小C说:“是不是要换个顺序才能打开?”

    小A觉得很有道理,但是这个情况数好像很多的样子,然而小A是个聪明的程序员,他有足够的信心破解这个手机图案密码。

    现在小A已经知道手机图案锁是只由哪几个位置组成的,手机图案锁的解锁只能通过一笔画解决,他最多需要多少次情况就一定能够破解该图案锁的密码?每个位置必须经过,每个位置只能够被经过一次。

     

    图案锁的组成有9个位置分别为:

    1    2    3

    4    5    6

    7    8    9

    1.jpg

    如上图所示:

    会提示你密码包含1,2,3,4,5,6,7,8,9.

           其中的一种画法如上图:5->4->2->6->7->1->9->8->3.

    经过小A多次研究,发现以下规律:

    如果你还没有经过5, 然后 你连接了1, 再去连接9的话则会经过5.

    如果你已经经过5, 然后你连接1, 再去连接9的话则不会在重新经过5.

    同理可得1346等也满足如上规律。

    Input

    有多组测试案例.
    每一组测试案例的第一行输入一个整数N(1<=N<=9),表示图案锁由N个密码组成。
    接下来输入N个数值,表示这N密码的位置。

    Output

    输出最多需要多少次便能够解锁,如果不能够解锁,请输出-1。

    SampleInput
    1
    1
    2
    1 9
    2 
    1 5
    3
    1 5 9
    
    
    
    SampleOutput
    1
    -1
    2
    4
    题意:一个n,然后n个数字。代表密码包含的数字,算出所有密码的组合就是答案,答案是全排列减去不符合的情况。
    思路:
    典型的深搜。为什么呢?假如密码为1,5,9。那么第一个数字可能是1,5,或9,然后他们有分别对应不同的第二步。但又不是简单的排列,
    因为如果某一次选择1,那么在5没有选之前不能选9.这样我们可以画出一颗树状图,递归遍历所有情况,当走到头的时候计数器加以,最后输出计数器,
    计数器为0是输出-1.
    典型的深搜。我们可以用深搜模拟选择密码,在遇到不符合条件的组合不选即可。
    标号【1】的部分代码加上可以看见你选了那些数字。dfs舍去了不符合组合减去的函数。挺简单的自己写下。暴力就学我,16个if ╮(╯▽╰)╭
    大概这样
    然后学长的判断是这样写的

    比如1的坐标是(1,1),9的坐标是(3,3)
    他们的中点是(2,2),所以检查一下在(2,2)上的5

     
     
     
     
    
    
  • 相关阅读:
    暑假第一周进度总结
    学习记录(Python字典)
    学习记录(Python元组)
    学习记录(完成实验一二安装Scala)
    学习记录(安装Sbt)
    学习记录(安装spark)
    学习记录(Python列表)
    学习记录(Python循环结构)
    学习记录(Python选择结构)
    学习记录(Python算数运算符与if语句)
  • 原文地址:https://www.cnblogs.com/Q1143316492/p/6371946.html
Copyright © 2011-2022 走看看