POJ 1270 Following Orders 拓扑排序
http://poj.org/problem?id=1270
题目大意:
给你一串序列,然后再给你他们部分的大小,要求你输出他们从小到大的所有排列。
如a b f g 然后 a<b ,b< f 那么符合要求的有abfg abgf agbf gabf(即不能出现(a在b后面,b在f后面)
思路:
把这些字符看成点,如果存在a<b的关系,则在有向图中建立一条边 v(a,b),然后进行拓扑排序。
话说这题的输入很坑爹,那个大小关系的我还以为是4个一组。。结果被坑死了。看了discuss改了才过。。第一次写拓扑。。。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=30;
char a[MAXN];
char temp[200];
int map[MAXN][MAXN];
bool vis[MAXN];
int id[MAXN],to[MAXN],route[MAXN];
int len; void topsort(int cur)
{
if(cur==len)
{
for(int i=0;i<len;i++)
printf("%c",a[ route[i] ]);
printf("\n");
return;
}
for(int i=0;i<len;i++)
{
if(!vis[i] && !to[i])
{
for(int j=0;j<len;j++) //与之相连的度减1
if(map[i][j])
to[j]--;
vis[i]=true;
route[cur]=i;
topsort( cur+1 ); for(int j=0;j<len;j++)
if(map[i][j])
to[j]++;
vis[i]=false;
}
}
} int main()
{
int kase=0;
while(gets(temp)!=NULL)
{
if(kase)
printf("\n");
kase++; memset(id,-1,sizeof(id));
memset(map,0,sizeof(map));
memset(vis,0,sizeof(vis));
memset(to,0,sizeof(to)); len=0;
for(int i=0;temp[i]!='\0';i++)
if(temp[i] !=' ')
a[len++]=temp[i]; sort(a,a+len);
for(int i=0;i<len;i++) //进行编号,当然你也可以直接用STL的map
id[ a[i]-'a']=i; gets(temp);
bool flag=0;
int x;
for (int i = 0; temp[i]!='\0'; i++) //建立图不是i+4就好,狂WA,后看DISCUSS,跟着改了就AC了
{
if (temp[i] == ' ')
continue;
if (!flag)
x =temp[i] - 'a';
else
{
map[ id[ x ] ][ id[ temp[i]-'a'] ]=1;
to[ id[temp[i]-'a']]++;
}
flag = !flag;
}
topsort(0);
}
return 0;
}
POJ 1270 Following Orders 拓扑排序的更多相关文章
- POJ 1270 Following Orders (拓扑排序,dfs枚举)
题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y. 要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...
- POJ 1270 Following Orders(拓扑排序)
题意: 给两行字符串,第一行为一组变量,第二行时一组约束(每个约束包含两个变量,x y 表示 x <y).输出满足约束的所有字符串序列. 思路:拓扑排序 + 深度优先搜索(DFS算法) 课本代码 ...
- POJ 1270 Following Orders
Following Orders Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 4902 Accepted: 1982 ...
- POJ 2367 (裸拓扑排序)
http://poj.org/problem?id=2367 题意:给你n个数,从第一个数到第n个数,每一行的数字代表排在这个行数的后面的数字,直到0. 这是一个特别裸的拓扑排序的一个题目,拓扑排序我 ...
- poj 3687 Labeling Balls(拓扑排序)
题目:http://poj.org/problem?id=3687题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号球最轻 ...
- [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10161 Accepted: 2810 D ...
- poj 2762(强连通分量+拓扑排序)
题目链接:http://poj.org/problem?id=2762 题意:给出一个有向图,判断任意的两个顶点(u,v)能否从u到达v,或v到达u,即单连通,输出Yes或No. 分析:对于同一个强连 ...
- POJ 2585.Window Pains 拓扑排序
Window Pains Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1888 Accepted: 944 Descr ...
- POJ 1128 Frame Stacking (拓扑排序)
题目链接 Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ...
随机推荐
- Java源代码之集合框架(图)
百度"java 集合"图时.搜出来一张图.图蛮不错的.跟大家分享下.
- 湖南省第八届大学生计算机程序设计竞赛(A,B,C,E,F,I,J)
A 三家人 Description 有三户人家共拥有一座花园,每户人家的太太均需帮忙整理花园.A 太太工作了5 天,B 太太则工作了4 天,才将花园整理完毕.C 太太因为正身怀六甲无法加入她们的行列, ...
- docker的数据持久化
挂载宿主机的目录(实现很多容器共用一个宿主卷) [root@localhost ~]# docker run -itd --name web01 -v /var/www/html:/var/www/h ...
- python2 python3 m2crypto 安装(rsa 私钥文件加密)
转自作者:大道至简_Andy 原文链接:https://www.jianshu.com/p/b308357ef649 第一种方式:使用apt-get(以Python2版本进行测试的) sudo apt ...
- 开始刷SGU
计划一天3题 请监督我 谢谢
- xml格式报文的拼装,和解析成实体类
我们的微信支付,使用的是第三方的支付,某银行的微信支持渠道.所有的接口请求.应答都是xml格式报文,这样就需要用到xml格式报文的拼装和解析,这儿简单讲一下. 拼接xml格式报文. 从页面表单提交和配 ...
- [React Native] Animate the Scale of a React Native Button using Animated.spring
In this lesson we will use Animated.spring and TouchableWithoutFeedback to animate the scale of a bu ...
- 华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root 下载地址 http://pan.baidu.com/s/1hsn6VzA 1. 在官网申请解锁码 申 ...
- 使用wget工具抓取网页和图片 及 相关工具几个
想保存一些网页,最后找到这 wget 的 shell脚本,虽然不是太理想,亲测可用呢. 使用wget工具抓取网页和图片 来源 https://my.oschina.net/freestyletim ...
- eclipse创建maven
第一步: 第二步 第三步: 第四步: 第五步: 第六步: <?xml version="1.0" encoding="UTF-8"?> <we ...