【笔记】《算法竞赛入门》习题7-3 UVa211_多米诺效应
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_多米诺效应的更多相关文章
- 【笔记】《算法竞赛入门》习题7-6 UVa12113_重叠的正方形
title: 习题7-6 UVa12113_重叠的正方形 date: 2021-01-31 19:08:00 categories: 算法竞赛入门 tags: 数据结构 算法 UVa <算法竞赛 ...
- (Step1-500题)UVaOJ+算法竞赛入门经典+挑战编程+USACO
http://www.cnblogs.com/sxiszero/p/3618737.html 下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年 ...
- 算法竞赛入门经典+挑战编程+USACO
下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinej ...
- [刷题]算法竞赛入门经典 3-12/UVa11809
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa11809:Floating-Point Numbers 代码: //UVa11 ...
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-10/UVa1587:Box 代码: //UVa1587 - Box #include&l ...
- [刷题]算法竞赛入门经典 3-7/UVa1368 3-8/UVa202 3-9/UVa10340
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 都是<算法竞赛入门经典(第二版)>的题目,标题上没写(第二版) 题目:算法竞赛入门经典 3-7/UVa13 ...
- [刷题]算法竞赛入门经典 3-4/UVa455 3-5/UVa227 3-6/UVa232
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 题目:算法竞赛入门经典 3-4/UVa455:Periodic Strings 代码: //UVa455 #inclu ...
- [刷题]算法竞赛入门经典 3-1/UVa1585 3-2/UVa1586 3-3/UVa1225
书上具体所有题目:http://pan.baidu.com/s/1hssH0KO(我也是在网上找到的pdf,但不记得是从哪里搜刮到的了,就重新上传了一遍) PS:第一次写博客分享我的代码,不知道我对c ...
- 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth
A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...
随机推荐
- hadoop支持lzo完整过程
简介 启用lzo 启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装lzo lzo并不是linux系统原生支持,所以需要下载安装软件 ...
- 数据库分表自增ID问题
.................................................................................................... ...
- Hive-常见调优方式 && 两个面试sql
Hive作为大数据领域常用的数据仓库组件,在设计和开发阶段需要注意效率.影响Hive效率的不仅仅是数据量过大:数据倾斜.数据冗余.job或I/O过多.MapReduce分配不合理等因素都对Hive的效 ...
- MySQL:安装与配置
记录一次 MySQL 在Windows系统的安装配置过程 安装MySQL 0.下载社区版安装包 官网下载地址:https://dev.mysql.com/downloads/installer/ 1. ...
- 【转载】Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)
出处:https://blog.csdn.net/caifengyao/article/details/65437695 在Android中,View的结构是树状的,所以,当触发触摸事件的时候,其事件 ...
- C#中事件流程的简单理解
C#中事件流程的简单理解 C#中事件基于委托,要理解事件要先理解委托,但是现在我还没想好怎么写委托,如果不懂委托可以先找找委托的文章 事件基于委托,为委托提供了一种发布/订阅机制 一上来就是这句话,很 ...
- 【python+selenium的web自动化】- Selenium WebDriver原理及安装
简单介绍 selenium selenium是一个用于测试web网页的自动化测试工具,它直接运行在浏览器中,模拟用户的操作.
- ZooKeeper 基本概念并介绍RPC中Netty和Zookeeper的使用
前言 ZooKeeper 是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等.Zookeeper提供一个类似Linux文件系统的属性结构,每个节点可存储少量的内存文件,并提供每 ...
- Java基础:常用基础dos命令
打开cmd的方式1.开始+系统+命令提示符2.win键+R 输入cmd 打开控制台3.在任意的文件夹下,按住shift键+鼠标右键点击,在此处打开命令提示行4.在资源管理器的地址栏前面加上cmd路径 ...
- CSS中的块级元素,行内元素,行内块元素
博客转载于:https://blog.csdn.net/swebin/article/details/90405950 块级元素 block 块级元素,该元素呈现块状,所以他有自己的宽度和高度,也就是 ...