需要一些卡更换算法的想法

时间:2016-11-03 17:17:38

标签: algorithm

问题如下:

两名玩家拥有以下格式的牌: 1.第一位玩家的牌顶部有一个字母[A-Z],底部有1或2个字母 2.第二位玩家的牌顶部有一个字母[A-Z],底部有一个数字

当卡片播放时,卡片顶部的字母将替换为底部的字母。

给定一系列数字和一张初始牌,两位牌手必须更换字母,直到第一张牌的字母转换成给定的序列。 这两个玩家可以使用每个玩家的牌数,并且对玩牌的顺序没有限制。

示例:

Player one has cards: (A, BC), (B, F), (F, BF), (C, D)
Player two has cards: (F, 0), (D, 3), (B, 2), (B, 1), (R, 3)

The given sequence: (3, 2, 0)
The initial card played: (A, BC)

1.(A, BC) played: BC
2.(C, D) played: BD
3.(D, 3) played: B (3)
4.(B, F) played: F (3)
5.(F, BF) played: BF (3)
6.(B, 2) played: F (3, 2)
7.(F, 0) played: (3, 2, 0)

我考虑了一个回溯的方法,但我被告知不需要这样的方法,我无法找到正确的方法

1 个答案:

答案 0 :(得分:1)

首先,几点意见:

  

两位玩家可以使用每张牌的牌数,并且对牌位的玩家顺序没有限制。

这意味着我们有两个玩家并不重要 - 重要的是游戏中存在哪些牌。

此外,如果卡片有无限制的使用,使用letter->数字和letter->信用卡,我们可以创建一个数字的逆映射到导致该数字的字母列表。

完成这些步骤后,如果<number of letters played>=<number of required numbers>,它看起来像assignment problem

否则(如果<number of letters played> < <number of required numbers>)我认为它可以由更复杂的flow network解决。