先根据图建图再拓扑排序。

/**
ID: jinbo wu
TASK: frameup
LANG:C++
*/
#include<bits/stdc++.h>
using namespace std;
map<char,int> x1,x2,y3,y2,vis,v;
char a[35][35];
int b[35][35];
char cnt[30];
int du[35];
bool vd[50];
int n,m,l;
char ans[50];
void dfs(int num)
{int u;if(num==l){cout<<ans<<endl;return ;}for(int i=0;i<l;i++){u=cnt[i];if(!vd[u]&&!du[u]){for(int j=0;j<l;j++)if(b[u][cnt[j]])du[cnt[j]]--;vd[u]=1;ans[num]=u+'A';dfs(num+1);for(int k=0;k<l;k++)if(b[u][cnt[k]])du[cnt[k]]++;vd[u]=0;} }}
int main()
{freopen("frameup.in","r",stdin);freopen("frameup.out","w",stdout); cin>>n>>m;char c;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){cin>>a[i][j];c=a[i][j];if(c!='.'){if(!x1[c]) x1[c]=i;else x1[c]=max(x1[c],i);if(!x2[c]) x2[c]=i;else x2[c]=min(x2[c],i);if(!y3[c]) y3[c]=j;else y3[c]=max(y3[c],j);if(!y2[c]) y2[c]=j;else y2[c]=min(y2[c],j); }if(!vis[c]&&c!='.'){cnt[l++]=c-'A';vis[c]=1;}}sort(cnt,cnt+l);
for(int k=0;k<l;k++){c=cnt[k]+'A';v.clear();int t=cnt[k]; for(int i=y2[c];i<=y3[c];i++){char u=a[x2[c]][i];int f=x2[c];if(u!=c&&!v[u]&&u!='.'){int d=u-'A';b[t][d]=1;du[d]++;v[u]=1;}} for(int i=y2[c];i<=y3[c];i++){char u=a[x1[c]][i];if(u!=c&&!v[u]&&u!='.'){int d=u-'A';b[t][d]=1;du[d]++;v[u]=1;}}for(int i=x2[c]+1;i<x1[c];i++){char u=a[i][y3[c]];if(u!=c&&!v[u]&&u!='.'){int d=u-'A';b[t][d]=1;du[d]++;v[u]=1;}} for(int i=x2[c]+1;i<x1[c];i++){int f=y2[c];char u=a[i][y2[c]];if(u!=c&&!v[u]&&u!='.'){int d=u-'A';b[t][d]=1;du[d]++;v[u]=1;}} }dfs(0);
}

usaco frame up(所有拓扑排序的输出)相关推荐

  1. HDU4857 逃生【拓扑排序】

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  2. HDU1285 确定比赛名次【拓扑排序】

    确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  3. 有向图 G=(V, E) 的拓扑排序

    有向图 G=(V,E)G=(V,E)G=(V,E) 的拓扑排序 拓扑排序概念 拓扑排序是针对有向图而言的,无向图中不存在拓扑排序的概念.所谓拓扑排序,即为有向图中全部顶点的一种线性排序.这个线性排序结 ...

  4. C++ 拓扑排序(AOV网络)

    一.思路 先扫描所有顶点,把入度为0的顶点(如C,E)进栈.然后,取栈顶元素,退栈,输出取得的栈顶元素v(即入度为0的顶点v).接着,把顶点v的邻接顶点w的入度减1,如果w的入度变为0,则进栈.接着, ...

  5. 图论 —— AOV 网与拓扑排序

    [AOV网] 日常生活中,一项大的工程可以看作是由若干个子工程组成的集合,这些子工程之间必定存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始. 我们用有向图来表现子工程之间的先后关 ...

  6. 输出dag的所有拓扑排序序列_算法学习笔记(53): 拓扑排序

    拓扑排序是对DAG(有向无环图)上的节点进行排序,使得对于每一条有向边 , 都在 之前出现.简单地说,是在不破坏节点 先后顺序的前提下,把DAG拉成一条链.如果以游戏中的科技树(虽然名字带树,其实常常 ...

  7. python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS

    在计算机科学, 图遍历(Tree Traversal,也称图搜索)是一系列图搜索的算法, 是单次访问树结构类型数据(tree data structure)中每个节点以便检查或更新的一系列机制.图遍历 ...

  8. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  9. C/C++二级指针概念及应用(有向图的邻接表(拓扑排序)、有向网图的邻接表、树的孩子表示)

    目录 一.概述 例1: 例2: 代码: 二.实例 1.有向图的邻接表(拓扑排序) 2.有向网图的邻接表 3.树的孩子表示 一.概述 二级指针:指向指针的指针.一般需要修改地址的时候会用到二级指针. 注 ...

最新文章

  1. 芒果正式版7.1sdk和siverligt Toolkit for 芒果
  2. 移动web开发调试工具AlloyLever介绍
  3. 85元一个万能工具箱,配齐24种螺丝刀+扳手,媲美德国工艺,家庭必备
  4. usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...
  5. 重庆木叶村,每天被忍者迷骚扰500次
  6. String和ByteBuffer互转
  7. Java BigDecimal 数据类型的运算
  8. oracle ADF 代码标准
  9. 360 RePlugin 初探
  10. 黑苹果 efi如何替换_小白第一次安装黑苹果,然后卡代码,别着急,教你一个通用步骤,一个一个排查,大部分是可以解决的,毕竟安装不是最难的一个步骤...
  11. 物流查询方法,一键导入单号自动识别快递公司
  12. 硬件设计之一——电源设计02:DCDC设计
  13. 微信小程序loding
  14. Ubuntu解决文件带锁问题
  15. Binary Search Tree(二叉搜索树、二叉查找树、二叉排序树)
  16. Pytorch:图像归一化
  17. [ffmpeg]ffmpeg yasm not found, use --disable-yasm for a crippled build
  18. IDEA使用archetype创建Maven项目(只有两个archetype)
  19. CentOS 6.4使用Nginx配置文件服务器
  20. Matlab细胞识别统计,血液细胞的图像识别计数方法与流程

热门文章

  1. 2022-2028年中国高等职业教育产业投资分析及前景预测报告
  2. Go 知识点(15)— 切片长度和容量
  3. Go 学习笔记(57)— Go 第三方库之 amqp (RabbitMQ 生产者、消费者整个流程)
  4. Excel+bat批量更改文件名
  5. 提升思辨能力和判断力
  6. MYSQL局域网访问设置
  7. 超详细中文预训练模型ERNIE使用指南-源码
  8. 正则语法完全正则表达式手册_语法格式重点
  9. NLP进阶之(七)膨胀卷积神经网络
  10. LeetCode简单题之最近的请求次数