POJ-1128-Frame Stacking
链接:https://vjudge.net/problem/POJ-1128
题意:
每张图片上面画了一些边框,给出这些边框叠在一起后的图片,图片边框一定是由一个字母表示并且每条边至少三个字符,输入保证至少会给出边框每条边的一个字母,一个角的一个字符表示两条边,图片边框用大写字母表示,并且不会有两张图片的边框使用同一个大写字母,求从下往上的重叠顺序,如果有多种结果的话就按照字典序输出所有结果
思路:
先建图,找每个图内部的图片个数,同时记录。
因为不用种类的都要输出,按照从小到大的字典序去DFS。
代码:
#include <iostream>
#include <memory.h>
#include <vector>
#include <map>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <queue>
#include <string>
#include <stack>
#include <iterator>
#include <stdlib.h>
#include <time.h>
#include <assert.h> using namespace std;
typedef long long LL;
const int MAXN = 30 + 10;
char G[MAXN][MAXN];
char res[MAXN];
int M[MAXN][MAXN];
int Vis[MAXN];
int in[MAXN];
int n, m, cnt; void Init()
{
cnt = 0;
memset(Vis, 0, sizeof(Vis));
memset(in, 0, sizeof(in));
memset(M, 0, sizeof(M));
} void DFS(int num)
{
if (num == cnt)
{
res[num] = '\0';
cout << res << endl;
return;
}
for (int i = 0;i < 26;i++)
{
if (in[i] == 0 && Vis[i])
{
res[num] = 'A'+i;
in[i] = -1;
for (int j = 0;j < 26;j++)
if (M[i][j])
--in[j];
DFS(num+1);
in[i] = 0;
for (int j = 0;j < 26;j++)
if (M[i][j])
++in[j];
}
}
return;
} int main()
{
while (cin >> n >> m)
{
Init();
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
cin >> G[i][j];
for (int k = 0;k < 26;k++)
{
int x1 = MAXN, y1 = MAXN, x2 = -1, y2 = -1;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
{
if (G[i][j] == 'A'+k)
{
x1 = min(x1, i);
y1 = min(y1, j);
x2 = max(x2, i);
y2 = max(y2, j);
}
}
if (x1 == MAXN || y1 == MAXN || x2 == -1 || y2 == -1)
continue;
Vis[k] = 1;
cnt++;
for (int i = x1;i <= x2;i++)
{
for (int j = y1;j <= y2;j++)
{
if (i == x1 || i == x2 || j == y1 || j == y2)
{
if (G[i][j] != 'A'+k && G[i][j] != '.')
{
int t = G[i][j]-'A';
if (!M[k][t])
++in[t], M[k][t] = 1;
}
}
}
}
}
DFS(0);
} return 0;
}
POJ-1128-Frame Stacking的更多相关文章
- POJ 1128 Frame Stacking(拓扑排序·打印字典序)
题意 给你一些矩形框堆叠后的鸟瞰图 推断这些矩形框的堆叠顺序 每一个矩形框满足每边都至少有一个点可见 输入保证至少有一个解 按字典序输出全部可行解 和上一题有点像 仅仅是这个要打印全部的可行 ...
- POJ 1128 Frame Stacking (拓扑排序)
题目链接 Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ...
- POJ 1128 Frame Stacking 拓扑排序+暴搜
这道题输出特别坑.... 题目的意思也不太好理解.. 就解释一下输出吧.. 它让你 从下往上输出. 如果有多种情况,按照字典序从小往大输出... 就是这个多种情况是怎么产生的呢. 下面给一组样例. 很 ...
- Frame Stacking ZOJ 1083,poj 1128
Frame Stacking Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4034 Accepted: 1352 De ...
- Frame Stacking(拓扑排序)
题目链接:http://acm.tju.edu.cn/toj/showp1076.html1076. Frame Stacking Time Limit: 1.0 Seconds Memory ...
- POJ 1988 Cube Stacking(并查集+路径压缩)
题目链接:id=1988">POJ 1988 Cube Stacking 并查集的题目 [题目大意] 有n个元素,開始每一个元素自己 一栈.有两种操作,将含有元素x的栈放在含有y的栈的 ...
- POJ 1988 Cube Stacking( 带权并查集 )*
POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...
- Frame Stacking 框架堆叠
/* [题目来源]http://poj.org/problem?id=1128 [题目分析] 几张图片叠在一起,给出堆叠后的情况,要求出所有可能的从下到上的堆叠顺序. [思路分析] 1.题目已经很明确 ...
- poj.1988.Cube Stacking(并查集)
Cube Stacking Time Limit:2000MS Memory Limit:30000KB 64bit IO Format:%I64d & %I64u Submi ...
- POJ 1988 Cube Stacking(带权并查集)
Cube Stacking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 23678 Accepted: 8299 Ca ...
随机推荐
- spl_autoload_register()和__autoload()2
这也是OO设计的基本思想之一.在PHP5之前,如果需要使用一个类,只需要直接使用include/require将其包含进来即可.下面是一个实际的例子: class ClassA{ public f ...
- js面试题知识点全解(一原型和原型链)
1.如何准确判断一个变量是数组类型2.写一个原型链继承的例子3.描述new一个对象的过程4.zepto(或其他框架)源码中如何使用原型链知识点:1.构造函数2.构造函数-扩展3.原型规则和示例4.原型 ...
- php入门学习
尤其不认可W3school之类的东西,不够深度,理解不深,比起这个更建议看官方文档,中文不清楚,看英文的. 入门视频:入门视频推荐:哈佛大学公开课:构建动态网站Beginner PHP and MyS ...
- python3-file的修改实现类似shell中sed的功能
# Auther: Aaron Fan '''思路:目的是为了修改yesterday这个文件,但是因为无法直接去修改这个文件,所以需要先把修改好的内容写入高yesterday.new这个文件中,然后再 ...
- Paint类的介绍
* Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类,一类与图形绘制相关,一类与 ...
- 存储类型auto,static,extern,register的区别 <转>
变量和函数的属性包括数据类型和数据的存储类别,存储类别指数据在内存中存储方式(静态和动态),包含auto,static,register,extern四种. 内存中.具体点来说内存分为三块:静态区,堆 ...
- Cookies的两种存取方式
我们在使用webview开发时,少不了和cookie打交道,在网页端我这使用的是asp.net开发的,安卓下的cookie和windows平台下还是有些不同的,后来看了看,原来有两种cookie的存取 ...
- Vue属性绑定
v-bind:属性动态绑定数据,简写: v-html:绑定html代码 {{}}:绑定数据,另一种v-text v-bind:class="{‘red’:isActive}" : ...
- C++时间操作的汇总
. 获取当前时间 time_t cur_time = time(NULL); . 把整数时间转为字符串时间 string GetStringTime(const time_t time) { stru ...
- ubuntu - 14.04,安装、配置GO语言开发工具Eclipse!!
在配置Eclipse之前,我们必须保证下面这些都已经安装,并且正常工作了: 一,Go语言:参考文章 http://blog.csdn.net/sunylat/article/details/49859 ...