title: 习题7-3 UVa211_多米诺效应

date: 2021-01-29 19:08:00

categories:

  • 算法竞赛入门

tags:

  • 数据结构
  • 算法
  • UVa

题目: 使用28个多米诺骨牌拼凑出输入的二维数组

思路,使用一个二维数组标记每个多米诺骨牌的牌号,下标为Pips,一个典型的回溯

//
// Created by hsby on 2021/1/30.
// #include <iostream>
#include <cstring>
using namespace std; int Dir[2][2] = {{0, 1}, {1, 0}}; int dom[7][7] = {0};
int g[7][8];
int ans[7][8];
int t; bool judge(){
for (int i = 0; i < 7; ++i) {
for (int j = 0; j < 8; ++j) {
if (!ans[i][j]) return false;
}
}
return true;
} void dfs(int ai){
// 如果判断可行,输出结果
if (judge()){
for (int i = 0; i < 7; ++i) {
for (int j = 0; j < 8; ++j) {
printf("%2d ", ans[i][j]);
}
cout << endl;
}
cout << endl;
t++;
return;
}
// flag表示在ai行之后找到了可以继续遍历的起点
int flag = 1;
// 从ai行开始找
for (int i = ai; i < 7 && flag; ++i) {
for (int j = 0; j < 8 && flag; ++j) {
if (ans[i][j]) continue;
// 找到了,开始往右和下两个方向探索
for (int k = 0; k < 2; ++k) {
int ti = i + Dir[k][0];
int tj = j + Dir[k][1];
if (ans[ti][tj] || ti > 6 || ti < 0 || tj > 7 || tj < 0) continue;
flag = 0;
int a = min(g[i][j], g[ti][tj]);
int b = max(g[i][j], g[ti][tj]);
int d = dom[a][b];
ans[i][j] = d;
ans[ti][tj] = d;
dfs(i);
ans[i][j] = 0;
ans[ti][tj] = 0;
}
}
}
} int main(){
int cnt = 1;
for (int i = 0; i < 7; ++i) {
for (int j = i; j < 7; ++j) {
dom[i][j] = cnt++;
}
} int n = 1;
while (!cin.eof()){
memset(g, 0, sizeof(g));
memset(ans, 0, sizeof(ans));
t = 0;
cout << "Layout #" << n << ":" << endl << endl;
for (int i = 0; i < 7; ++i) {
for (int j = 0; j < 8; ++j) {
cin >> g[i][j];
cout << g[i][j] << " ";
}
cout << endl;
}
cout << endl;
cout << "Maps resulting from layout #" << n << " are:" << endl << endl;
dfs(0);
cout << "There are " << t++ << " solution(s) for layout #" << n++ << "." << endl << endl;
} return 0;
}

【笔记】《算法竞赛入门》习题7-3 UVa211_多米诺效应的更多相关文章

  1. 【笔记】《算法竞赛入门》习题7-6 UVa12113_重叠的正方形

    title: 习题7-6 UVa12113_重叠的正方形 date: 2021-01-31 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa <算法竞赛 ...

  2. (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO

    http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...

  3. 算法竞赛入门经典+挑战编程+USACO

    下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...

  4. [刷题]算法竞赛入门经典 3-12/UVa11809

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...

  5. [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...

  6. [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...

  7. [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...

  8. [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...

  9. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

随机推荐

  1. spring5学习笔记

    Spring5 框架概述 1.Spring 是轻量级的开源的 JavaEE 框架 2.Spring 可以解决企业应用开发的复杂性 3.Spring 有两个核心部分:IOC 和 Aop (1)IOC:控 ...

  2. Python数据结构与算法_搜索插入位置(07)

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5输出 ...

  3. 面试必知:String、StringBuilder、StringBuffer的区别

    你知道String.StringBuilder.Stringbuffer的区别吗?当你创建字符串的时候,有考虑过该使用哪个吗? 别急,这篇文章带你解决这些问题. 可变性 首先,String是字符串,我 ...

  4. 【Notes】现代图形学入门_01

    跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...

  5. 小白养成记——JavaWeb之文件的上传

    文件的上传推荐使用commons的fileupload组件来完成.该组件还依赖于io包,因此需要用到两个jar包: commons-fileupload-X.X.jar commons-io-X.X. ...

  6. DRF 三大认证的配置及使用方法

    目录 三大认证 一.身份认证 1.身份认证配置 1.1 全局配置身份认证模块 1.2 局部配置身份认证模块 2.drf提供的身份认证类(了解) 3.rf-jwt提供的身份认证类(常用) 4.自定义身份 ...

  7. Linux关机指令详解

    Linux关机指令 在linux领域内大多用在服务器上,很少遇到关机的操作.毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机. 正确的关机流程为:sync > shutdown ...

  8. JAVA基础(二)—— 常用的类与方法

    JAVA基础(二)-- 常用的类与方法 1 Math类 abs ceil floor 绝对值 大于等于该浮点数的最小整数 小于等于该浮点数的最大整数 max min round 两参数中较大的 两参数 ...

  9. SpringCloud(四):服务注册中心Eureka Eureka高可用集群搭建 Eureka自我保护机制

    第四章:服务注册中心 Eureka 4-1. Eureka 注册中心高可用集群概述在微服务架构的这种分布式系统中,我们要充分考虑各个微服务组件的高可用性 问题,不能有单点故障,由于注册中心 eurek ...

  10. java中ArrayList 和 LinkedList 有什么区别

    转: java中ArrayList 和 LinkedList 有什么区别 ArrayList和LinkedList都实现了List接口,有以下的不同点:1.ArrayList是基于索引的数据接口,它的 ...