日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UVA211 TheDomino Effect 多米诺效应

發布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA211 TheDomino Effect 多米诺效应 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:一副“雙六”多米諾骨牌包含28張

現給出一個排列,求其所有排列組合。

輸出所有可能的右圖

分析:有兩種方法可做,區別就是搜索對象,第一種是搜索pips,每次只需要列舉pips的兩個編號即可,第二種是搜索bones每次都從列表中判斷對應的序號是否還有。博主水平有限,第二種沒做出來。

以第一種情況分析,每次先搜索0~6,然后再搜索0~6對應的0~6。每次就縱坐標加一。

#include<cstdio> #include<cstring> #include<cctype> #include<queue> #include<iostream> #include<vector> #include<list> #include<set> using namespace std;const int d[2][2] = { {1, 0}, {0, 1} }; int cas = 0, g[7][8], ans, num[7][7], vis[7][8], v[30], res[7][8]; void init() {ans = 0;memset(v, 0, sizeof(v));memset(vis, 0, sizeof(vis));for (int i = 0; i < 7; i++)for (int j = 0; j < 8; j++) {if (i == 0 && j == 0) continue;scanf("%d", &g[i][j]);} } bool judge(int x) {for (int j = 0; j < 8; j++)if (vis[x][j] == 0) return true;return false; } void dfs(int x, int y, int nu) {if (nu == 28) {ans++;for (int i = 0; i < 7; i++) {for (int j = 0; j < 8; j++)printf("%4d", res[i][j]);printf("\n");}printf("\n");return;}if (x == 7) return;if (y == 8) {if (judge(x)) return;dfs(x + 1, 0, nu);return;}if (vis[x][y]) {dfs(x, y + 1, nu);return;}for (int i = 0; i < 2; i++) {if (i == 0 && x == 6) continue;if (i == 1 && y == 7) continue;int xx = x + d[i][0];int yy = y + d[i][1];if (vis[xx][yy]) continue;if (v[num[g[x][y]][g[xx][yy]]]) continue;res[x][y] = res[xx][yy] = num[g[x][y]][g[xx][yy]];vis[x][y] = vis[xx][yy] = v[num[g[x][y]][g[xx][yy]]] = 1;dfs(x, y + 1, nu + 1);vis[x][y] = vis[xx][yy] = v[num[g[x][y]][g[xx][yy]]] = 0;} } void solve() {if (cas) printf("\n\n\n");printf("Layout #%d:\n\n", ++cas);for (int i = 0; i < 7; i++) {for (int j = 0; j < 8; j++)printf("%4d", g[i][j]);printf("\n");}printf("\nMaps resulting from layout #%d are:\n\n", cas);dfs(0, 0, 0);printf("There are %d solution(s) for layout #%d.\n", ans, cas); } void table() {int cnt = 1;for (int i = 0; i <= 6; i++)for (int j = i; j <= 6; j++) {num[i][j] = num[j][i] = cnt++;} } int main() {table();while (~scanf("%d", &g[0][0])) {init();solve();}return 0; }

?

?

總結

以上是生活随笔為你收集整理的UVA211 TheDomino Effect 多米诺效应的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。