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. ........ ........ ...
随机推荐
- 认识 Atlassian Datacenter 产品
认识 Atlassian Datacenter 产品 云端原本就是群集化的架构,Atlassian 系列产品.应用的开发团队相当广范且行之有年,可是将应用程序作为节点(比方Jira,confluenc ...
- 单线程实现检索当当网泄露的1GB用户数据
新建项目dangdangusersearch 2.编写头文件head.h #ifndef _HEAD_H_ #define _HEAD_H_ #include <stdio.h> ...
- es65 跨模块常量
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 72.调用req.flash('error', '用户已存在!'); 时候 报错 "req.flash is not a function"
在app.js 中调用app.use 的顺序有关 app.use(session({ secret: settings.cookieSecret, key: settings.db,//cookie ...
- 58.express安装问题:express不是内部也或者外部的命令解决方案
转自:https://www.cnblogs.com/zhangym118/p/5842094.html "Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列 ...
- 51.cgi网站后门
运行截图: html开发: <html> <body> <form id="form" name="form" method=&q ...
- SSH远程快速登录Linux
SSH远程快速登录Linux 使用SSH管理linux服务器,通常要使用ssh,然后输入用户,密码,其实只要配置一个文件就可以方便登录.假设要登录server域名是www.interne ...
- javaweb三、JDBC访问数据库
JDBC是J2SE的内容,是由java提供的访问数据库的接口,但没有提供具体的实现方法,需要数据库厂商提供,就是对应的数据库驱动. 这样的好处是可以方便的更换数据库,提高了扩展性.这也是面向接口编程的 ...
- [ Java ] [ Spring ] Spring 一些配置项 及 <context:annotation-config/> 專文解释说明
節錄重點: @ Resource .@ PostConstruct.@ PreDestro.@PersistenceContext.@Required 都必須聲明相關的 bean 所以如果總是需要按照 ...
- 今日SGU 5.12
SGU 149 题意:求每一个点的距离最远距离的点的长度 收获:次大值和最大值,dfs #include<bits/stdc++.h> #define de(x) cout<< ...