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 拓扑排序的更多相关文章

  1. POJ 1270 Following Orders (拓扑排序,dfs枚举)

    题意:每组数据给出两行,第一行给出变量,第二行给出约束关系,每个约束包含两个变量x,y,表示x<y.    要求:当x<y时,x排在y前面.让你输出所有满足该约束的有序集. 思路:用拓扑排 ...

  2. POJ 1270 Following Orders(拓扑排序)

    题意: 给两行字符串,第一行为一组变量,第二行时一组约束(每个约束包含两个变量,x y 表示 x <y).输出满足约束的所有字符串序列. 思路:拓扑排序 + 深度优先搜索(DFS算法) 课本代码 ...

  3. POJ 1270 Following Orders

    Following Orders Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4902   Accepted: 1982 ...

  4. POJ 2367 (裸拓扑排序)

    http://poj.org/problem?id=2367 题意:给你n个数,从第一个数到第n个数,每一行的数字代表排在这个行数的后面的数字,直到0. 这是一个特别裸的拓扑排序的一个题目,拓扑排序我 ...

  5. poj 3687 Labeling Balls(拓扑排序)

    题目:http://poj.org/problem?id=3687题意:n个重量为1~n的球,给定一些编号间的重量比较关系,现在给每个球编号,在符合条件的前提下使得编号小的球重量小.(先保证1号球最轻 ...

  6. [ACM] POJ 3687 Labeling Balls (拓扑排序,反向生成端)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10161   Accepted: 2810 D ...

  7. poj 2762(强连通分量+拓扑排序)

    题目链接:http://poj.org/problem?id=2762 题意:给出一个有向图,判断任意的两个顶点(u,v)能否从u到达v,或v到达u,即单连通,输出Yes或No. 分析:对于同一个强连 ...

  8. POJ 2585.Window Pains 拓扑排序

    Window Pains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1888   Accepted: 944 Descr ...

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

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

随机推荐

  1. 认识 Atlassian Datacenter 产品

    认识 Atlassian Datacenter 产品 云端原本就是群集化的架构,Atlassian 系列产品.应用的开发团队相当广范且行之有年,可是将应用程序作为节点(比方Jira,confluenc ...

  2. 单线程实现检索当当网泄露的1GB用户数据

     新建项目dangdangusersearch 2.编写头文件head.h #ifndef _HEAD_H_ #define _HEAD_H_ #include <stdio.h>   ...

  3. es65 跨模块常量

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 72.调用req.flash('error', '用户已存在!'); 时候 报错 "req.flash is not a function"

    在app.js 中调用app.use 的顺序有关 app.use(session({ secret: settings.cookieSecret, key: settings.db,//cookie ...

  5. 58.express安装问题:express不是内部也或者外部的命令解决方案

    转自:https://www.cnblogs.com/zhangym118/p/5842094.html "Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列 ...

  6. 51.cgi网站后门

    运行截图: html开发: <html> <body> <form id="form" name="form" method=&q ...

  7. SSH远程快速登录Linux

    SSH远程快速登录Linux        使用SSH管理linux服务器,通常要使用ssh,然后输入用户,密码,其实只要配置一个文件就可以方便登录.假设要登录server域名是www.interne ...

  8. javaweb三、JDBC访问数据库

    JDBC是J2SE的内容,是由java提供的访问数据库的接口,但没有提供具体的实现方法,需要数据库厂商提供,就是对应的数据库驱动. 这样的好处是可以方便的更换数据库,提高了扩展性.这也是面向接口编程的 ...

  9. [ Java ] [ Spring ] Spring 一些配置项 及 <context:annotation-config/> 專文解释说明

    節錄重點: @ Resource .@ PostConstruct.@ PreDestro.@PersistenceContext.@Required 都必須聲明相關的 bean 所以如果總是需要按照 ...

  10. 今日SGU 5.12

    SGU 149 题意:求每一个点的距离最远距离的点的长度 收获:次大值和最大值,dfs #include<bits/stdc++.h> #define de(x) cout<< ...