博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
211:The Domino Effect
阅读量:6918 次
发布时间:2019-06-27

本文共 2053 字,大约阅读时间需要 6 分钟。

回溯加剪枝。只需DFS右、下两个方向即可,可以一行一行来。弄完一行之后看下该行所有数字是否都配对了,否则剪枝。还是得细心,两个 cnt 认错了找了大半天 bug 。。。

#include
using namespace std;const int n = 7;int cnt;int dx[] = {1, 0}, dy[] = {0, 1};int dict[n][n], G[n][n+1], M[n][n+1], vis[n][n+1], use[30];bool judge(int x) { for (int j = 0; j <= n; j++) if (vis[x][j] == 0) return true; return false;}void DFS(int x, int y, int cnt2){ if(cnt2 == 28){ for(int i = 0; i < n; i++){ for(int j = 0; j <= n; j++){ printf("%4d", M[i][j]); } putchar('\n'); } putchar('\n'); cnt++; return; } if(x == n) return; if(y == n+1){ if (judge(x)) return; DFS(x + 1, 0, cnt2); return; } if(vis[x][y]){ DFS(x, y + 1, cnt2); return; } for(int i = 0; i < 2; i++){ int nx = x + dx[i], ny = y + dy[i]; int k = dict[G[x][y]][G[nx][ny]]; if(nx == n || ny == n+1 || vis[nx][ny] || use[k]) continue; M[x][y] = M[nx][ny] = k; vis[x][y] = vis[nx][ny] = use[k] = 1; DFS(x, y + 1, cnt2 + 1); vis[x][y] = vis[nx][ny] = use[k] = 0; }}int main(){ // freopen("data.in","r",stdin); // freopen("data.out","w",stdout); int c = 1; for(int i = 0; i < n; i++) for(int j = i; j < n; j++) dict[j][i] = dict[i][j] = c++; int T = 0; while(scanf("%d", &G[0][0]) != EOF){ for(int i = 0; i < n; i++){ for(int j = 0; j <= n; j++){ if(!i && !j) continue; scanf("%d", &G[i][j]); } } if(T++) printf("\n\n\n"); printf("Layout #%d:\n\n", T); for(int i = 0; i < n; i++){ for(int j = 0; j <= n; j++){ printf("%4d", G[i][j]); } putchar('\n'); } printf("\nMaps resulting from layout #%d are:\n\n", T); cnt = 0; DFS(0, 0, 0); printf("There are %d solution(s) for layout #%d.\n", cnt, T); } return 0;}

 

转载于:https://www.cnblogs.com/JingwangLi/p/10252585.html

你可能感兴趣的文章
《HTML5 开发实例大全》——1.30 联合使用< section >和< article >标签
查看>>
《Adobe SiteCatalyst网站分析权威手册》一第1章 什么是Adobe SiteCatal0yst1.1 SiteCatalyst简史...
查看>>
《R语言数据挖掘》----第2章 频繁模式、关联规则和相关规则挖掘 2.1关联规则和关联模式概述...
查看>>
Kgif:一个从活动窗口创建 GIF 的简单脚本
查看>>
《Unity着色器和屏幕特效开发秘笈(原书第2版)》一1.3 从Unity 4向Unity 5迁移...
查看>>
自己动手构造编译系统:编译、汇编与链接2.1 编译程序的设计
查看>>
hive改表结构的两个坑
查看>>
git代码托管 code.csdn.net
查看>>
eclipse git 上下箭头表示什么
查看>>
《C语言及程序设计》实践项目——算术运算符与算术表达式
查看>>
20、Python与设计模式--解释器模式
查看>>
Spark:超越Hadoop MapReduce
查看>>
【Spark Summit East 2017】pySpark时间序列分析新方向
查看>>
MySQL 建表字段长度的限制
查看>>
Hbase 学习(十一)使用hive往hbase当中导入数据
查看>>
Python模块之: configobj
查看>>
快速修改主机名 (centos7, ubuntu16)
查看>>
Android开发者指南(16) —— Activity and Task Design
查看>>
Java千百问_06数据结构(017)_什么是二维数组
查看>>
Android群英传笔记——第四章:ListView使用技巧
查看>>