UVA 211 The Domino Effect 【搜索】
来源:互联网 发布:安卓软件挂 编辑:程序博客网 时间:2024/06/06 00:01
题目链接:https://vjudge.net/problem/UVA-211
题意:
每个多米诺骨牌可以由两个数字组成,给你一个7*8的网格,问能构成多少个骨牌号码,号码不能重复
题解:
首先大家不要D我的翻译,,
还有,lrj先生的紫书里面没提到不能用重复的,mdzz..
剩下的就是简单的搜索就行了。
映射的求法?刚开始也困扰我一些时间。
比对骨牌号码和数字,我们发现一个规律。
答案就是:
int c = 0;for ( int i = 0; i < 7; i ++ ) { for ( int j = 0; j < 7; j ++ ) mp[i][j] = mp[j][i] = ++c;}
代码:
// by DenyTianly#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int inf = 1 << 26;int g[505][505], mp[505][505];int vis[505][505], choose[505];int d[][2] = { {1, 0}, {0, 1} };int tot = 0;void initmp() { // 求映射 int c = 0; for ( int i = 0; i < 7; i ++ ) { for ( int j = i; j < 7; j ++ ) mp[i][j] = mp[j][i] = ++c; }}void outans() { // 输出 for ( int i = 0; i < 7; i ++ ) { for ( int j = 0; j < 8; j ++ ){ printf("%4d", vis[i][j]); } puts(""); } puts("");} void dfs(int x, int y, int cnt) { // 搜索 if(cnt == 28) { // 7*8/2 = 28,即搜索完成 tot ++; outans(); return ; } if(y == 8) { // 换行 y = 0; x ++; } if(vis[x][y]){ dfs(x, y+1, cnt); return ; } // 访问过该点直接换下一个 for ( int i = 0; i < 2; i ++ ) { // 骨牌可以向下或者向右放置 int fx = x+d[i][0], fy = y+d[i][1]; if(fx >= 7 || fy >= 8 || vis[fx][fy]) continue; int k = mp[g[x][y]][g[fx][fy]]; if(choose[k] == 1) continue; vis[fx][fy] = vis[x][y] = k; choose[k] = 1; dfs(x, y+1, cnt+1); vis[fx][fy] = vis[x][y] = 0; choose[k] = 0; } return ;}int cas = 0;int main(){// freopen("UVA211.in", "r", stdin); initmp(); while( scanf("%d", &g[0][0]) != EOF ) { memset(vis, 0, sizeof(vis)); memset(choose, 0, sizeof(choose)); tot = 0; ++ cas; if(cas > 1) puts("\n\n"); printf("Layout #%d:\n\n", cas); for ( int i = 0; i < 7; i ++ ) { for ( int j = 0; j < 8; j ++ ) if(!(!i&&!j)) scanf("%d", &g[i][j]); } for ( int i = 0; i < 7; i ++ ) { for ( int j = 0; j < 8; j ++ ) { printf("%4d", g[i][j]); } puts(""); } printf("\nMaps resulting from layout #%d are:\n\n", cas); dfs(0, 0, 0); printf("There are %d solution(s) for layout #%d.\n", tot, cas); } return 0;}
0 0
- UVA 211 The Domino Effect 【搜索】
- uva-211-The Domino Effect
- UVA 211 The Domino Effect
- UVA 211 The Domino Effect
- uva 211 The Domino Effect
- The Domino Effect (UVA
- The Domino Effect UVA
- The Domino Effect UVA
- uva 211 - The Domino Effect(DFS)
- UVa 211 - The Domino Effect (DFS)
- UVa 211 - The Domino Effect [DFS剪枝]
- UVA 211(p215)----The Domino Effect
- UVA 211 - The Domino Effect(dfs+剪枝)
- UVa 211 - The Domino Effect(枚举+回溯)
- 211 - The Domino Effect(暴力)
- UVa211 - The Domino Effect
- UVa211 - The Domino Effect(DFS)
- Uva211 The Domino Effect 【dfs回溯】【习题7-3】
- 说反话 :给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
- Mysql学习笔记十八——存储引擎
- Java并发编程:volatile关键字解析
- 8.剑指offer-删除链表中重复节点
- 动态链表的创建及使用
- UVA 211 The Domino Effect 【搜索】
- 【java】硬币问题
- 【pygame入门】-- 事件
- python基础之数据类型
- 关于map
- 锁对象---lock_guard和unique_lock
- Echarts-引入两个/多个图标
- mybatis的mapper XML
- matlab 文件批量重命名