字牌跑鬍子王賴聽牌演算法c lua實現詳解

2021-10-02 16:52:48 字數 1380 閱讀 1097

static const vectorpublicpailib

;static const int kindpai = 555; //王賴牌

內含lua實現

字牌有大字40張小字40張,特殊玩法會帶王賴。

我們在玩字牌的時候,打出一張牌的時候會思考接下來聽什麼牌:

現在有手牌:101  102  103  104 105 106 107 108 109 110 (桌低有跑牌要做將情況)

暫時先不考慮最小和牌胡息就會有以下組合聽牌:

(101 102 103)(104 105 106)(107 108 109)聽 110

(101 102 103)(104 105 106)(108 109 110)聽 107

(101 102 103)(105 106 107)(108 109 110)聽 104

(102 103 104)(105 106 107)(108 109 110)聽 101

那用**的形式我們該怎樣實現呢?

這裡先找出手牌中由3個牌組成的所有有效組合。

(101 102 103)(102,103,104)(103,104,105)(104,105,106)

(105,106,107)(106,107,108)(107,108,109) (108,109,110)

(102,107,110)

然後從有效組合中找出(手牌數除以3)組(101 102 103)(104 105 106)(107 108 109)

這樣的有效牌組剩什麼牌,再拿剩下的牌去判斷聽什麼樣的牌就行了。

有王賴的情況下會遞迴一層,用王賴替換掉可以組成有效牌型的牌,**中做了很多優化,

不然純窮舉的話,時間複雜度會很高,特別是賴子很多情況下。

3張4張王的情況複雜度會很高。

4張王賴最高特殊情況用了27m,最低小於1秒。

王賴建議不要在工作中使用。

測試:

void test()

; handpokers.emplace_back(kindpai);

//vectorhandpokers = ;

mapres;

int huxi = 0;

gettingpai(handpokers,res, huxi);

for (auto it = res.begin(); it != res.end(); it++) }

int main() //算聽啥

getchar();

return 0;

}

測試結果:

二七十,大貳,跑鬍子的吃牌演算法

最近在寫跑鬍子這個專案的時候,遇到了吃的情況,自己想了一種演算法,我的小字是0 9代表一到十,大字是10 19代表壹到拾。吃的情況 大約有五種 比如小7,有可能是789,678,567,77大7,大7大7小7,2710。大概就是這六種情況。我的思路就是能放在左邊的1 8。意思就是123,234 34...

跑鬍子程式開發記錄(一) 緣起

緣起 2020年春節,因為疫情只能呆在家,不能串門,只好打跑鬍子。雖說自己也是常德人,很早也就學會了跑鬍子,但這技術還是得靠平時練的,在工作的城市,根本沒機會打跑鬍子,相比於呆在老家經常操練的親戚朋友,我那技術差得太遠了,只能是給他們送錢。輸錢倒也無所謂,畢竟是輸給家人,但一兩個小時也沒胡一盤牌,他...

從走到跑 王秀娟的堅守

將帥的堅強意志,就像城市主要街道匯集點上的方尖碑一樣,在軍事藝術中占有十分突出的地位。戰爭論 克勞塞維茨 人們一直常說,耐得住寂寞,才守得住繁華。但凡成功之人,往往都要經歷一段沒人支援 沒人幫助的黑暗歲月,而這段時光,恰恰是沉澱自我的關鍵階段。猶如黎明前的黑暗,挨過去,天也就亮了。2008年4月,五...