首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
UVA1602
】的更多相关文章
UVA-1602 Lattice Animals 搜索问题(打表+set)
题目链接 https://vjudge.net/problem/UVA-1602 紫书的一道例题,跟之前的很多题目有很多不同. 本题不像是一般的dfs或bfs这样的搜索套路,而是另一种枚举思路. 题意: 输入n. w. h(1≤n≤10,1≤w,h≤n),求能放在w*h网格里的不同的n连块的个数(平移. 旋转. 翻转后相同的图形算作同一种). 思路: 思路很明确,生成图形后判重,加入重复表或弃掉. 本题的重点就在生成和判重. 我的思路: 连通块的生成:通过维护一个int open[10][10]…
UVA1602
实现的细节很多,学到了如何翻转.旋转.平移,get很多技巧,值得一做. AC代码: #include<cstdio> #include<cstring> #include<set> #include<algorithm> using namespace std; const int maxn=10+5; int ans[maxn][maxn][maxn]; struct animal{ int x,y; animal(int x=0,int y=0):x(x…
UVA1602 Lattice Animals 网格动物 (暴力,STL)
多联骨牌的生成办法,维基上只找到固定的骨牌fix,而free的没有找到. 于是只好写个set判重的简单枚举了. 旋转的操作,可以在坐标轴上画个点,以原点为轴心,逆时针旋转90度,新的点的坐标为(-y,x).顺时针也差不多. 反转类似. 对于操作完的骨牌,还要进行标准化,取最小的横纵坐标为参考,求出新的坐标,以便于判断. 生成所有骨牌以后,预处理一下(一顿乱搞)就好了. #include<bits/stdc++.h> using namespace std; #define local ; st…
UVA1602 Lattice Animals 搜索+剪枝
题目大意 给出一个$w\times h$的网格,定义一个连通块为一个元素个数为$n$的方格的集合$A,\forall x\in A, \exists y\in A$,使得$x,y$有一条公共边.现要求一个元素个数极多的连通块的集合$K_N$,使得$\forall A,B\in K_n$,不存在一种由对称.旋转.平移组成的操作$f(A)$,使得$f(A)=B$.求$|K|$.$w\leq h\leq n\leq 10$. 题解 这道题可把我恶心到吐了... 主体算法 错误算法1 跟宝藏一题的思路一…
【例题 7-14 UVA-1602】Lattice Animals
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 借鉴网上的题解的. 思路是. 用"标准化"的思想. 确定基准点(0,0) 然后假设(0,0)是第一个连通块. 然后通过大小为1的连通块(0,0)得到所有大小为2的连通块. 然后得到所有大小为3的连通块.. 以此类推 这样可以避免回溯的过程. 直接递推就好. 然后判重. 就是 (标准化->旋转)[4] 以及 翻转-> (标准化->旋转)[4] ()[x]表示括号内的过程重复4次 看看每一种是不是都不存在…
网格动物UVA1602
题目大意 输入n,w,h(1<=n<=10,1<=w,h<=n).求能放在w*h网格里的不同的n连块的个数(平移,旋转,翻转算一种) 首先,方法上有两个,一是打表,dfs构造连通块,枚举出来后再进行判重,另一种就是直接枚举每种连通块,保证每种连通块只枚举一次(这个方法还不会..但可以访问en.wikipedia.org/wiki/Polyomino 进行学习) 先看第一种方法: 1.如何构造连通块? 因为是构造连通块,所以就不能像寻找连通块或寻找路径那么做...一开始就犯了这种错误…
UVa 1602 网格动物(回溯)
https://vjudge.net/problem/UVA-1602 题意:计算n连通块不同形态的个数. 思路: 实在是不知道该怎么做好,感觉判重实在是太麻烦了. 判重就是判断所有格子位置是否都相同,这样我们可以定义一个结构体来保存每个格子的坐标点,用set容器poly来保存这些格子,然后再用一个set容器poly_set来保存指定数量i个连通块的各个图形的坐标点,也就是说该容器是用来保存poly的.(不太好解释,具体可以看代码.)因为图形必须是连通的,所以在添加第i个格子的时候必定是在i-1…