国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Polya問題

2019-11-09 21:17:23
字體:
來源:轉載
供稿:網友

Polya問題

給定紅色和藍色給八個棋子涂色,求所有的涂色方案,其中某種方案可以通過旋轉到另一種,則這兩種方案視作一種。

研一組合數學講的波利亞定義,旋轉輪換的內容。

如果用代碼解決,可以將八個棋子視作二進制的8位。那么如果不考慮條件所說的旋轉算一做,那理論上有255種不同的方案。

同樣是篩選法的思想,假設現在一共255種方案,那么遍歷這些方案,對某種方案循環左移8次(8次后肯定會回到相同的位置),循環左移得到的數字,我們只保留最小的那個數,作為這個類別的代表,其他的篩選掉。

代碼

int RotateLeft(int x, int N){ int high =( x >> (N-1));// 取出最高位 x = ((1 << (N-1)) - 1)&x; x = x << 1; x |= high; return x;}int Polya(int N){ int m = 1 << N; vector<int>p(m, 1);//還未開始篩選 for (int i = 0; i < m; ++i) { if (1 == p[i])//還未開始篩選 { int k1 = i; for (int j = 0; j < N; ++j) { int k2 = RotateLeft(k1, N);//循環左移一次 if (k2 == i) { break;//完成一輪 } if (k2 > i) { p[k2] = 0;//視作無效 } else//k2<i { p[i] = 0; break; } k1 = k2; } } } return count(p.begin(), p.end(), 1);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南宁市| 新巴尔虎左旗| 顺昌县| 晋江市| 泸西县| 江北区| 海原县| 保康县| 甘南县| 金沙县| 大庆市| 鄄城县| 弥渡县| 娄烦县| 宁海县| 六盘水市| 嘉定区| 青浦区| 交口县| 繁昌县| 西安市| 洪泽县| 五原县| 安阳市| 崇信县| 南漳县| 即墨市| 定襄县| 平江县| 万年县| 靖边县| 德安县| 博野县| 扶余县| 河间市| 苗栗市| 崇左市| 石楼县| 乌兰察布市| 内黄县| 永春县|