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 ...
随机推荐
- spring-jar包及架构介绍
查看博客: http://www.cnblogs.com/ywlaker/p/6136625.html
- 【java】for循环嵌套
循环嵌套:外循环控制行数,内循环控制每一行的列数,也就是每一行的元素个数 需求:打印出9*9的乘法表 class Demo { public static void main(String[] arg ...
- Delphi常用API,API函数
auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属设备数量 auxGetVolume API 获取当前卷设置 auxOutMessage API 向输出 ...
- Android app内存限制OOM
Android系统的每个app做了内存限制,版本的android系统,不同的设备对每个app的内存限制可能有所不同,从早期的16M ,32M到现在的256M,384M...虽然内存增大了,但是不代表就 ...
- 注册表项关于start参数的说明
start = {0,1,2,3,4}0 == 由核心装载器装载1 == 由I/O子系统装载2 == 自动启动3 == 手工启动4 == 禁止启动
- 深度图像配准(Registration)原理
机器视觉中,3D相机产生的深度图像(depth image)通常需要配准(registration),以生成配准深度图像(registed depth image).实际上配准的目的就是想让深度图和彩 ...
- java网络编程Socket通信详解
Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...
- Git忽略规则和.gitignore规则不生效的解决办法
Git忽略规则和.gitignore规则不生效的解决办法 Git忽略规则: 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如果 ...
- MSSQL 2012 密钥
MICROSOFT SQL SERVER 2012 企业核心版激活码序列号: FH666-Y346V-7XFQ3-V69JM-RHW28 MICROSOFT SQL SERVER 2012 商业智能版 ...
- django之中间件middleware
django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...