poj1270 拓扑序(DFS)
题意:给出将会出现的多个字母,并紧接着给出一部分字母的大小关系,要求按照字典序从小到大输出所有符合上述关系的排列。
拓扑序,由于需要输出所有排列,所以需要使用 dfs ,只要点从小到大遍历就可以实现字典序排列了。
#include<stdio.h>
#include<string.h> int ma[][],id[],vis[],v[],n; char s[],ans[]; char read(){
char c=getchar();
while((c>'z'||c<'a')&&(c!='\n'))c=getchar();
return c;
} void dfs(int ss,int t){
ans[t]=ss+'a';
v[ss]=;
if(t==n){
for(int i=;i<=n;++i)printf("%c",ans[i]);
printf("\n");
v[ss]=;
return;
}
int que[],cnt=;
for(int i=;i<;++i){
if(ma[ss][i])id[i]--;
if(vis[i]&&!id[i]&&!v[i])que[++cnt]=i;
}
for(int i=;i<=cnt;++i)dfs(que[i],t+);
for(int i=;i<;++i)if(ma[ss][i])id[i]++;
v[ss]=;
} int main(){
int ccnt=;
while(scanf("%s",s)!=EOF){
if(ccnt++)printf("\n");
memset(ma,,sizeof(ma));
memset(id,,sizeof(id));
memset(vis,,sizeof(vis));
memset(v,,sizeof(v));
n=;
vis[s[]-'a']=;
n++;
char c1,c2;
while(c1=getchar()){
if(c1=='\n')break;
if(c1>'z'||c1<'a')continue;
int cc=c1-'a';
if(!vis[cc]){
vis[cc]=;
n++;
}
}
bool f=;
while(f){
c1=read();
if(c1=='\n')break;
c2=read();
int cc1=c1-'a',cc2=c2-'a';
if(!ma[cc1][cc2]){
ma[cc1][cc2]=;
id[cc2]++;
}
}
for(int i=;i<;++i)if(vis[i]&&!id[i])dfs(i,);
}
return ;
}
poj1270 拓扑序(DFS)的更多相关文章
- hdu5438(2015长春赛区网络赛1002)拓扑序+DFS
题意:给出一张无向图,每个节点有各自的权值,问在点数为奇数的圈中的点的权值总和是多少. 通过拓扑序的做法标记出所有非圈上的点,做法就是加每条边的时候将两点的入度都加一,然后将所有度数为1的点入队,删去 ...
- poj1128 拓扑序(DFS)
题意:给出一张图,它是由一系列字母框按一定顺序从下到上摆放,因此上面的字母框会覆盖一部分下面的字母框,确保每个字母框的四条边都至少会出现一个点,要求输出所有可行的摆放顺序,字典序从小到大输出. 首先可 ...
- 拓扑排序+DFS(POJ1270)
[日后练手](非解题) 拓扑排序+DFS(POJ1270) #include<stdio.h> #include<iostream> #include<cstdio> ...
- ACM/ICPC 之 拓扑排序+DFS(POJ1128(ZOJ1083)-POJ1270)
两道经典的同类型拓扑排序+DFS问题,第二题较第一题简单,其中的难点在于字典序输出+建立单向无环图,另外理解题意是最难的难点,没有之一... POJ1128(ZOJ1083)-Frame Stacki ...
- poj2762 强连通+拓扑序
题意:有 n 个房间,不同房间之间有单向通道,问是否任意两个房间 A .B 都可以从 A 到 B 或从 B 到 A(有一条有就可以). 在这题中,如果一些点是在同一个强连通分量中,那么这些点肯定能够相 ...
- UVA10305 拓扑序
题意:给出多个任务,以及一系列任务的关系表示某个任务必须在某个任务前完成,问一个合理的任务完成顺序 拓扑序的裸题,一开始用大白书的写法,后来发现并不好用,就换了BFS又A了一遍. 原: #includ ...
- codevs1304 拓扑序计数
题目描述 Description 求一颗有根树/树形图的拓扑序个数. 输入描述 Input Description ...
- 拓扑序+dp Codeforces Round #374 (Div. 2) C
http://codeforces.com/contest/721/problem/C 题目大意:给你有向路,每条路都有一个权值t,你从1走到n,最多花费不能超过T,问在T时间内最多能访问多少城市? ...
- bzoj5280/luogu4376 MilkingOrder (二分答案+拓扑序)
二分答案建图,然后判环,就可以了. 字典序输出的话,只要做拓扑序的时候用优先队列来维护就可以了. (其实判环也可以用拓扑序...) #include<cstdio> #include< ...
随机推荐
- opencv 工程的保存
一个项目的保存,只要保存工程底下的.CPP .h .dll .lib 输入输出文件即可 最终保存的文件
- Volatile vs VolatileRead/Write?
You should never use Thread.VolatileRead/Write(). It was a design mistake in .NET 1.1, it uses a ful ...
- SqlServer DateDiff函数 比较时间 (转)
DateDiff函数 是一个非常有用的函数,它可以为一些网页做一些特殊的效果. 我就曾用到它和一张'new'字样的图片 来区别网页显示的信息是否为最近的信息.例如:提示最近的通知,最近的新闻等等 ...
- Tarjan算法求有向图的强连通分量
算法描述 tarjan算法思想:从一个点开始,进行深度优先遍历,同时记录到达该点的时间(dfn记录到达i点的时间),和该点能直接或间接到达的点中的最早的时间(low[i]记录这个值,其中low的初始值 ...
- 2016 - 1- 22 img tag and the lists (intro to HMTL&CSS)
1 :The img tag img tag allows put some img file into page. just like : <a href = "me.png&quo ...
- Java私有构造器
Java私有构造器:使用private关键字声明的构造函数.由于类的构造函数时私有的,所以此类不能被实例化,同时也不能被继承.<Effective Java>第三条:用私有构造器或者枚举强 ...
- 制作0.5px像素的细条
<!DOCTYPE html><html><head> <meta charset="utf-8"> <meta name=& ...
- 2016年11-29 mysql数据库
php搭建环境:WAMP APPSERVERLAM架构:linux系统,apache服务器管理软件,mysql数据库,php语言 php apache.net iisjava tomcat mysql ...
- 用提交按钮提交form问题验证没通过依然提交表单
<form id="sb" action="${pageContext.request.contextPath }/admin/loanContract/addOr ...
- Shell 条件表达式汇总
条件表达式 文件表达式 if [ -f file ] 如果文件存在if [ -d ... ] 如果目录存在if [ -s file ] 如果文件存在且非空 if [ -r f ...