uva-519-拼图
给你N*M个碎片,问能否用他们拼成一个矩形,矩形的边缘要全是F,除外界边缘的边要么是I,要么O,不能是F
1.碎片会重复出现,所以同样的碎片在同一个位置,如果已经不能放,直接跳过就行
2.矩形的边缘要全是F,除外界边缘的边要么是I,要么O,所以有I的数量等于0数量,上外边界F数量等于M,其他三边同理
WA了N遍
#include <stdio.h>
#include<iostream>
#include <string.h>
#include<memory.h>
using namespace std;
int N;
int M;
int flag;
int num[];
char noPeat[][];
int nl = ;
char m[][][];
int read()
{
char str[]={};
int IN[] = { };
int ON[] = { };
int FN[] = { };
gets(str);
for(int i = ; i < N * M; i++)
{
gets(str);
int ok = ;
for(int j = ; j < nl; j++)
if(noPeat[j][] == str[] && noPeat[j][] == str[]
&& noPeat[j][] == str[] && noPeat[j][] == str[])
{
ok = ;
num[j]++;
break;
}
if(ok)
{
noPeat[nl][] = str[];
noPeat[nl][] = str[];
noPeat[nl][] = str[];
noPeat[nl][] = str[];
num[nl]++;
nl++;
}
for(int j = ; j < ; j++)
{
if(str[j] == 'I')
IN[j]++;
if(str[j] == 'O')
ON[j]++;
if(str[j] == 'F')
FN[j]++;
}
}
if(FN[] != M || FN[] != M)
return ;
if(FN[] != N || FN[] != N)
return ;
if(IN[] != ON[] || IN[] != ON[])
return ;
if(IN[] != ON[] || IN[] != ON[])
return ;
return ;
}
int check(int r, int c, char str[])
{
if(r == && str[] != 'F')
return ;
if(r == N && str[] != 'F')
return ;
if(c == && str[] != 'F')
return ;
if(c == M && str[] != 'F')
return ;
if(r != && str[] == 'F')
return ;
if(r != N && str[] == 'F')
return ;
if(c != && str[] == 'F')
return ;
if(c != M && str[] == 'F')
return ;
if(m[r][c - ][] == 'I' && str[] != 'O')
return ;
if(m[r][c - ][] == 'O' && str[] != 'I')
return ;
if(m[r - ][c][] == 'I' && str[] != 'O')
return ;
if(m[r - ][c][] == 'O' && str[] != 'I')
return ;
return ;
}
void dfs(int r, int c)
{
if(c == M + )
dfs(r + , );
if(flag)
return;
if(r == N + )
{
flag = ;
return;
}
for(int i = ; i < nl; i++)
{
if(num[i] && check(r, c, noPeat[i]))
{
num[i]--;
m[r][c][] = noPeat[i][];
m[r][c][] = noPeat[i][];
m[r][c][] = noPeat[i][];
m[r][c][] = noPeat[i][];
dfs(r, c + );
if(flag)
return;
m[r][c][] = ;
m[r][c][] = ;
m[r][c][] = ;
m[r][c][] = ;
num[i]++;
} } }
int main()
{
freopen("d://1.txt", "r", stdin);
while (cin >> N >> M && (N + M))
{
flag = ;
nl = ;
memset(num, , sizeof(num));
memset(m, , sizeof(m));
memset(noPeat, , sizeof(noPeat));
int ok = read();
if(!ok)
{
cout << "NO" << endl;
continue;
}
dfs(, );
if(flag)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return ;
}
uva-519-拼图的更多相关文章
- Puzzle (II) UVA - 519
题目链接: https://vjudge.net/problem/UVA-519 思路: 剪枝+回溯 这个题巧妙的是他按照表格的位置开始搜索,也就是说表格是定的,他不断用已有的图片从(0,0)开始拼到 ...
- UVa 10012 - How Big Is It? 堆球问题 全排列+坐标模拟 数据
题意:给出几个圆的半径,贴着底下排放在一个长方形里面,求出如何摆放能使长方形底下长度最短. 由于球的个数不会超过8, 所以用全排列一个一个计算底下的长度,然后记录最短就行了. 全排列用next_per ...
- 拼图小游戏之计算后样式与CSS动画的冲突
先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...
- JavaScript版拼图小游戏
慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...
- 利用Vue.js实现拼图游戏
之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...
- PIC12F508/505/509/510/506/519/526/527单片机破解芯片解密方法!
IC芯片解密PIC12F508/505/509/510/506/519/526/527单片机破解 单片机芯片解密型号: PIC12F508解密 | PIC12F505解密 | PIC12F506解密 ...
- WPF学习系列 游戏-选张图片做成9宫格拼图
今天要学习一个拼图项目. 目标是传入一张图片,然后将它分成9份,去掉一份,鼠标点击进行拼图. 源文件结构很简单 第一步.新建项目 这一步没什么好说的,新建一个项目就跟源文件结构一样了 第二步.页面布局 ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
随机推荐
- java架构师之路--推荐书籍
1.大型网站技术架构:核心原理与案例分析 本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选 ...
- 2017.11.7 ant design - upload 组件的使用, react 条件渲染以及 axios.all() 的使用
一.主要任务:悉尼小程序管理后台,添加景点页面的开发 二.所遇问题及解决 1. 上传多个不同分类音频信息时,如中文音频和英文音频,要求音频不是放在一个数组中的,每个音频是一个独立的字段,此时: < ...
- button高度改变
代码:<input type="button" name="submit" value="submit" /> 利用css改变b ...
- MySQL 快速构造一亿条记录的表
在上一次朋友问我如何快速构造一亿条记录的表后,我理出了实行的办法,见:http://blog.csdn.net/mchdba/article/details/52938114,但是因为录入一亿表需要2 ...
- ThinkPHP 3.1.2 输出和模型使用 配置项等 - 2
一.ThinkPHP 3 的输出 (重点) a.通过 echo 等PHP原生的输出方式在页面中输出 b.通过display方法输出 想分配变量可以使用assign方法 c.修改左右定界符 休 ...
- 不可小视的String字符串
String印象 String是java中的无处不在的类,使用也很简单.初学java,就已经有字符串是不可变的盖棺定论,解释通常是:它是final的. 不过,String是有字面量这一说法的,这是其他 ...
- 黄聪:多个wordpress网站(不同域名)共享用户数据的方法
WordPress可以自定义用户数据表,这样多个wordpress网站就可以共享用户数据了,有时候这是非常方便的,这些Wordpress站点应该安装在同一个数据库下,数据表前缀各不相同.由于Wordp ...
- JAVA面向对象编程之购物车界面的设计与功能的实现
1.小组成员及分工 小组成员 负责工作 兰泽祥 负责总体界面.Git代码库 吴修恩 负责MVC模式.类名包名的规范化 2.Git 仓库地址 仓库地址:https://gitee.com/lanzexi ...
- C/C++基础----重载运算与类型转换
非成员版本 data1 + data2: operator+(data1, data2); 成员版本 data1 += data2: data1.operator+=(data2); 不建议的重载 逻 ...
- defaultProps和propTypes
在上一篇文章中总结了父子组件的数据传递,下面先来简单的回顾一下之前的内容: 此时,子组件中div里面的数据依赖于父组件传递过来的数据,那么当父组件没有给子组件传递数据时,子组件div里面就没有了数据了 ...