| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 机考 出牌顺序 dfs -> 正文阅读 |
|
[数据结构与算法]机考 出牌顺序 dfs |
题目: 给定一堆牌,每张牌都有数字和颜色,选手从中选出一张后,只能再挑选颜色或者数字和上一张相同的牌,否则不能抽选 选手应该怎么选才能使得抽选的次数最大,并且输入这个最大次数 输入 第一行 牌的数值n (1<=n<=10) 第二行 牌的颜色(r,l,g,t四种颜色表示) 输入 抽取的最大次数 示例: 输入 4 1 3 5 4 r g t r n 输出 3 这个题当时尝试了50分钟没搞出来,因为之前没做过广度优先法的题,没这个思维。后来看了下网友的思路 参考LeetCode547,本质就是BFS进行图的遍历,找到最大连通的子图的节点数
我没看懂,但是我感觉算的并不对 我按照这个思路,给了一个例子: 1 2 3 3 5 5 a b b c b a
我需要先把这些牌之间的关系找出来,就是按数字比相等或者按照花色比相同
然后再记录一个map,每次出一张牌,都要将这个牌的map位置1,这样下次就不再找这个牌了
思路就是,假设从每一个牌开始出,计算后面在这个牌为前的所有可能性,然后可以接的牌,再作为前一个牌,去找接下来的其他牌的可能性.......依次查下去,这肯定需要递归的思想。 麻烦的在于,牌出了一次就不能再出了,但是我先按照一个排序查找后,置map,又不能影响后面可能性的map,这就需要每次从一个情况往下找时,用自身独立的map,不影响其他情况。 每次找到一张牌的可能性后,都要计数+1再加上下一次查找的值,返回。 比如说,我先出第一张牌,置map[0]=1;再找下一张牌的可能性, 根据record[0][i] (i!=0)发现只有i=5的可能性; count++ 然后5再找下一张,置map[5]=1;根据record[0][i] (i!=0)发现只有i=4的可能性; count++ 然后4再找下一张,置map[4]=1;根据record[0][i] (i!=0)发现有i=1;i=2的可能性;(i=4不能等于自己,和i=5已经用过了,所以排除) count++ 然后1再找下一张,同时2再找下一张。。。(这就需要同时查两种情况了,算出来的可能性,取最大值返回) ......... 这样到最后,map也满了,或者找不到record == 1的情况了,就返回0,就结束了这个路径的递归查找了。
上面代码的targetNum其实就是为了找出路径,不然就只要找到返回值的最大值就可以了。 找出经历过的路径也比较麻烦,因为递归的时候并不知道哪个才是最大的可能性,得都找到最大值后,再找到第一张开始的,再来一遍 输入: 1 2 3 3 5 5 a b b c b a 输出: card_num:6 card[0]: 1 a card[1]: 2 b card[2]: 3 b card[3]: 3 c card[4]: 5 b card[5]: 5 a 1 0 0 0 0 1 0 1 1 0 1 0 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 1 1 1 0 0 0 1 1 num:0 num:1 num:2 num:3 num:4 num:5 num---:0 3 2 1 4 5 num---:3 0 5 4 1 2 max:6 可以看到从牌0和牌3开始,路径都最长
0 5 4 1 2 3 3 2 1 4 5 0 我一直对算法类的东西感觉很困难,递归啊之类的,还是得多练 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:58:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |