链接: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的更多相关文章

  1. POJ 1128 Frame Stacking(拓扑排序&#183;打印字典序)

    题意  给你一些矩形框堆叠后的鸟瞰图  推断这些矩形框的堆叠顺序  每一个矩形框满足每边都至少有一个点可见  输入保证至少有一个解 按字典序输出全部可行解 和上一题有点像  仅仅是这个要打印全部的可行 ...

  2. POJ 1128 Frame Stacking (拓扑排序)

    题目链接 Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ...

  3. POJ 1128 Frame Stacking 拓扑排序+暴搜

    这道题输出特别坑.... 题目的意思也不太好理解.. 就解释一下输出吧.. 它让你 从下往上输出. 如果有多种情况,按照字典序从小往大输出... 就是这个多种情况是怎么产生的呢. 下面给一组样例. 很 ...

  4. Frame Stacking ZOJ 1083,poj 1128

    Frame Stacking Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4034   Accepted: 1352 De ...

  5. Frame Stacking(拓扑排序)

    题目链接:http://acm.tju.edu.cn/toj/showp1076.html1076.   Frame Stacking Time Limit: 1.0 Seconds   Memory ...

  6. POJ 1988 Cube Stacking(并查集+路径压缩)

    题目链接:id=1988">POJ 1988 Cube Stacking 并查集的题目 [题目大意] 有n个元素,開始每一个元素自己 一栈.有两种操作,将含有元素x的栈放在含有y的栈的 ...

  7. POJ 1988 Cube Stacking( 带权并查集 )*

    POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...

  8. Frame Stacking 框架堆叠

    /* [题目来源]http://poj.org/problem?id=1128 [题目分析] 几张图片叠在一起,给出堆叠后的情况,要求出所有可能的从下到上的堆叠顺序. [思路分析] 1.题目已经很明确 ...

  9. poj.1988.Cube Stacking(并查集)

    Cube Stacking Time Limit:2000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submi ...

  10. POJ 1988 Cube Stacking(带权并查集)

    Cube Stacking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 23678   Accepted: 8299 Ca ...

随机推荐

  1. cfree使用cygwin编译程序出现计算机丢失cygwin1.dll解决办法

    这种情况多是环境没配好,我的是64位cygwin C:\cygwin64\bin 加入到环境变量中,重打开cfree就可以解决.

  2. Internet Intranet Extranet

    Internet: There's only one of it, and you're on it now. Intranet: An internal network local to a com ...

  3. 【总结整理】webGIS学习

    安装ArcGIS Server + ArcSDE + PostgreSQL + ArcMap安装(windows7)博客:https://blog.csdn.net/buqutianya/articl ...

  4. C++——const

    参考:https://www.cnblogs.com/Forever-Kenlen-Ja/p/3776991.html ; //修饰变量,a不能该内容(更改为其他的值) int* const p = ...

  5. bluebird 开发文档链接

    参考文献:http://bluebirdjs.com/docs/api/promise.mapseries.html

  6. 简单的jQuery前端验证码校验

    简单的jQuery前端验证码校验2 html; <!DOCTYPE html> <html lang="zh-cn"> <head> <m ...

  7. (转)Linux网络协议栈(三)——网络设备(1)

    网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1)    作为基于硬件的网络适配器与基于软件的协 ...

  8. ubuntu apt指令分析

    ubunut安装软件时候需要查看源内可供选择的安装包的一些信息,此处提供一些指令方便以后查阅 apt-get sudo apt-get update #更新源 sudo apt-get upgrade ...

  9. 算法Sedgewick第四版-第1章基础-012一用stack实现输出一个数的二进制形式

    @Test public void e1_3_5() { Stack<Integer> stack = new Stack<Integer>(); int N = 7; whi ...

  10. 数字图像处理实验(7):PROJECT 04-03 , Lowpass Filtering 标签: 图像处理MATLAB 2017-05-25 09:30 109人

    实验要求: Objective: To observe how the lowpass filtering smoothes an image. Main requirements: Ability ...