majiang_algorithm是帶多張鬼牌的通用胡牌演算法,採用查表方式,簡單高效。
在生成表的階段,時間是不值錢的,所以生成方法我們可以任意窮舉。
首先分為普通、風、箭三張表。
窮舉出所有的key,比如普通表,就是000000000-444420000,因為每一種牌最大4張,且總和不超過14張牌。
對於每個key,生成這個key在不同鬼的情況下的胡牌資訊列表。
胡牌資訊列表的內容是,在n張鬼的情況下,這個key胡什麼牌,並且是否有將。
例如1萬2萬5萬5萬:110020000,生成的胡牌資訊有。
1萬2萬5萬5萬:鬼0 有將 胡3萬(0個鬼的時候,這個牌胡3萬,此時有將)有了前面辛苦生成的**,那麼判斷胡牌演算法就很簡單了。對玩家手上的牌進行編碼,變成多個key和鬼牌總數。n,例如手牌如下1萬2萬5萬5萬:鬼1 無將 胡3萬胡5萬(1個鬼的時候,這個牌胡3萬5萬,此時無將)
1萬2萬5萬5萬:鬼1 有將 胡了(1個鬼的時候,這個牌已經胡了(鬼變成3萬),此時有將)
1萬2萬5萬5萬:等等...
得到key:110020000、020000000和鬼牌總數2。
對每個key查詢表,得到對應的胡牌資訊列表。
針對每組列表,過濾掉鬼牌總數》n的項以及沒有胡的項,上面的例子就會有。
1萬2萬5萬5萬:鬼1 有將 胡了簡單遞迴下,看看幾組胡牌資訊列表裡,是否滿足鬼牌總數和只有乙個將的約束。2筒2筒:鬼1 無將 胡
如果有任意組合滿足,則胡了,在上面的例子裡,恰好滿足條件,於是胡了。
總耗時:查表耗時*m + 遞迴m層分配鬼和將的耗時m是花色數目,m<=5。
與胡牌演算法類似,根據key查出胡牌資訊列表。
簡單遞迴下,找出滿足鬼的總數和只有乙個將的約束時,所有不能胡的胡牌資訊裡可胡牌的集合,就是這手牌能胡什麼牌。
麻將胡牌演算法 C
這裡只介紹普通的麻將胡牌演算法,也就是7個對子或者 1個對子 3 n n 三個順子或者三個一樣的 其中字牌 東南西北中發白 不能算順子。首先對於每張牌 它有牌的的數字 1 9,牌的種類 萬條筒以及字 所以先封裝乙個牌的包裝類。如果要和伺服器互動的話就應該給這個類序列化 即加上system.seria...
麻將胡牌判決
胡牌有以下幾種情況 1 乙個對子 4組 3個相同的牌或者順子。只有m s p是可以構成順子的。東西南北這樣的牌沒有順子。2 7個不同的對子。3 1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c.這13種牌每種都有,而且僅有這13種牌。肯定是有一種2張。其他的1張。首先是列...
麻將胡牌判決
就是給了13張牌。問增加哪些牌可以胡牌。胡牌有以下幾種情況 1 乙個對子 4組 3個相同的牌或者順子。只有m s p是可以構成順子的。東西南北這樣的牌沒有順子。2 7個不同的對子。3 1m,9m,1p,9p,1s,9s,1c,2c,3c,4c,5c,6c,7c.這13種牌每種都有,而且僅有這13種牌...