骨牌无非两种放法,横着或竖着放,每次检查最r,c最小的没访问过的点即可。如果不能放就回溯。

最外面加一层认为已经访问过的位置,方便判断。

#include<bits/stdc++.h>const int MAXD = 56;
const int MAXB = 29;
const int MAXP = 7;bool used[MAXB];// used Bone
int pip[MAXP][MAXP];// pip 2 Boneint tab[7][8];
int ans[8][9];int cnt;
void dfs(int r,int c)
{while(ans[r][c]) {if(c == 8) { r++; c = -1; }c++;}if(r == 7) {for(int i = 0; i < 7; i++){for(int j = 0; j < 8; j++){printf("%4d",ans[i][j]);}putchar('\n');}putchar('\n');cnt++;return ;}int &p0 = tab[r][c];if(!ans[r][c+1]){ // 横着放int &p1 = tab[r][c+1];int &bone = pip[p0][p1];if(!used[bone]){used[bone] = 1;ans[r][c+1] = ans[r][c] = bone;dfs(r,c+1);ans[r][c+1] = ans[r][c] = 0;used[bone] = 0;}}if(!ans[r+1][c]) { //竖着放int &p2 = tab[r+1][c];int &bone = pip[p0][p2];if(!used[bone]){used[bone] = 1;ans[r+1][c] = ans[r][c] = bone;dfs(r,c+1);ans[r+1][c] = ans[r][c] = 0;used[bone] = 0;}}}int main()
{//  freopen("in.txt","r",stdin);// freopen("my.txt","w",stdout);for(int h = 0,c = 0; h < 7; h++)for(int i = h; i < 7; i++){pip[i][h] = pip[h][i] = ++c;}int *layout = *tab;int cas = 0;while(~scanf("%d",layout)){if(cas) printf("\n\n\n");memset(ans,0,sizeof(ans));memset(used,0,sizeof(used));cnt = 0;for(int i = 0; i < 7; i++) ans[i][8] = 233;for(int i = 0; i < 8; i++) ans[7][i] = 233;for(int i = 1; i < MAXD; i++)scanf("%d",layout+i);printf("Layout #%d:\n\n",++cas);for(int i = 0; i < 7; i ++){for(int j = 0; j < 8; j++)printf("%4d",tab[i][j]);putchar('\n');}printf("\nMaps resulting from layout #%d are:\n\n",cas);dfs(0,0);printf("There are %d solution(s) for layout #%d.\n",cnt,cas);}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4637051.html

UVA 211 The Domino Effect 多米诺效应 (回溯)相关推荐

  1. UVa 211 The Domino Effect 多米诺效应 暴力搜索

    题目链接:UVa 211 The Domino Effect 题目描述: 一张多米诺骨牌拥有两个数值,一共有二十八张不同的多米诺骨牌,这二十八张多米诺骨牌的点数如下图所示: 上图的 B o n e B ...

  2. POJ 1135 Domino Effect(最短路 多米诺骨牌)

    题意 题目描述:  你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两张骨牌之间只有很短的空隙.如果排列得很好,当你推 倒第 1张骨 ...

  3. POJ 1135 -- Domino Effect(单源最短路径)

     POJ 1135 -- Domino Effect(单源最短路径) 题目描述:  你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行, ...

  4. UVa 211 多米诺效应(The Domino Effect)

    题目: 有一副多米诺骨牌,包含28张,每个多米诺骨牌正反面各有一个数字. 在7 * 8的网格中各张牌各摆一张,左边是个格子的典树,右边是格子所属的骨牌序号,要求输出所有可能的骨牌序号. 搜索与回溯,注 ...

  5. C - The Domino Effect(dfs+回溯)

    作者:JF 题目描述 一组标准的双六多米诺骨牌包含28块骨牌(称为骨头),每个骨牌使用类似骰子的点子显示从0(空白)到6的两个数字.28块独特的骨骼由以下PIP组合组成: 一组中的所有双六个多米诺骨牌 ...

  6. 习题7-3 多米诺效应(The Domino Effect, ACM/ICPC World Finals 1991, UVa211)

    谜一般的格式换行,为啥格式错报WA额. 这题也是用回溯法解决,只是判断情况稍微复杂些. 本质都是相同的,每次有两种决策,一行一行来处理. 当进行到某一行时,上一行还存在未vis的位置则回溯. #inc ...

  7. Poj 1135 Domino Effect(Dijkstra)

    题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两张骨牌之间只有很短的空隙.如果排列得很好,当你推 倒第1 张骨牌,会使 ...

  8. poj 1135 Domino Effect (Dijkstra)

    1 题目大意 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一些多米诺骨牌,竖着排成连续的一行,两张骨牌之间只有很短的空隙.如果排列得很好,当你推倒第1 张骨牌,会使其 ...

  9. 「POJ 1135」Domino Effect(dfs)

    BUPT 2017 Summer Training (for 16) #3G 题意 摆好的多米诺牌中有n个关键牌,两个关键牌之间有边代表它们之间有一排多米诺牌.从1号关键牌开始推倒,问最后倒下的牌在哪 ...

最新文章

  1. 无人机送外卖已落地深圳,这体验有多爽?你根本想不到!
  2. C#多线程函数如何传参数和返回值
  3. 创建没有Document的MFC MDI应用程序
  4. Python BeautifulSoup库 API
  5. Python之实现常见算法
  6. 20200827:2020力扣第33周双周赛题解
  7. Python核心编程答案(自整理)
  8. 时序预测 | MATLAB实现DBN深度置信网络时间序列预测
  9. 读书笔记-人月神话8
  10. 已知闭合曲线上各点的坐标,如何求曲线上的凹点
  11. 绿盟 java 面试_绿盟科技校园招聘面试经验|面试问题(共52条)- 职业圈
  12. struct和typedef struct的用法和区别
  13. 树莓派搭建LAMP和FTP服务器
  14. 国产电子书的代表作是什么样的?
  15. 解析淘口令获取商品id,包含有效时间
  16. 联想笔记本声音太小怎么办_笔记本声音太小,详细教您笔记本电脑声音太小解决方法...
  17. proteus——555 PWM 发生器
  18. $http与ajax的同步请求
  19. 10 windows 启动虚拟机报错_VirtualBox5.0安装Windows10虚拟机启动失败
  20. 李沐 课程1.4-2.1

热门文章

  1. iOS-小Demo(Swift基础练习)--双TableView关联
  2. layout蛇形线建议
  3. python的loc函数_如何在pandas中使用loc、iloc函数进行数据索引(入门篇)
  4. 量化投之:连2年报率打败巴菲特
  5. 大学生家乡主题甘肃介绍网页代码 dreamweaver网页设计作业制作 WEB静态网页作业模板 dw个人网页作业成品
  6. 时间复杂度和空间复杂度(C站最详细的)
  7. 华为中国生态大会2021:因聚而生 有能有为
  8. 搭建velocity开发环境
  9. Fully Convolutional Networks for Semantic Segmentation(FCN)阅读理解
  10. DNF搬砖小妙招:如何搭建设备网络