简单的胡牌算法:
C#
public static bool canHu(List<int> list, int num)
{
List<int> pai = new List<int>(list);
pai.Add(num);
if (pai.Count == 2)
{
if (pai[0] == pai[1])
{
return true;
}
}
pai.Sort();
for (int i = 0; i < pai.Count; i++)
{
List<int> paiList = new List<int>(pai);
List<int> doublePai = pai.FindAll(delegate (int a) {
return paiList[i] == a;
});
if (doublePai.Count >= 2)
{
paiList.Remove(pai[i]);
paiList.Remove(pai[i]);
i += doublePai.Count;
if (isHu(paiList))
{
return true;
}
}
}
return false;
}
public static bool isHu(List<int> list)
{
if (list.Count == 0)
{
return true;
}
List<int> valueList = list.FindAll(delegate (int a) {
return list[0] == a;
});
if (valueList.Count == 3)
{
list.Remove(list[0]);
list.Remove(list[0]);
list.Remove(list[0]);
return isHu(list);
} else
{
if (list.Contains(valueList[0] + 1) && list.Contains(valueList[0] + 2))
{
list.Remove(valueList[0]);
list.Remove(valueList[0]+1);
list.Remove(valueList[0]+2);
return isHu(list);
}
}
return false;
}
评论