// 给出一个字母表和一些字母对(c1,c2)表示c1<c2// 求出所有满足要求的排列,并按照字典序输出

#include<iostream>      //拓扑排序 + dfs#include<algorithm>#include<string>using namespace std;int dict[30],edge[30][30],vis[30],rear,path[30],in[30];void topo_sort(int pos){if(pos==rear)    {for(int i=0;i<rear;++i)            cout<<char(path[i]+'a');        cout<<endl;return;    }//经由主函数的sort(dict,dict+rear);再让下标从小到大深搜所有可能组合,就可以按照字典序输出全部解了    for(int i=0;i<rear;++i)          {if(!vis[dict[i]]&&in[dict[i]]==0)    //没有访问过且入度为0        {            path[pos]=dict[i];            vis[dict[i]]=1;for(int j=0;j<rear;++j)            {if(edge[dict[i]][dict[j]]==1)                {in[dict[j]]--;                }            }            topo_sort(pos+1);

            vis[dict[i]]=0;for(int j=0;j<rear;++j)            {if(edge[dict[i]][dict[j]]==1)                {in[dict[j]]++;                }            }        }    }}int main(){string str;while(getline(cin,str))    //输入字母表    {        memset(edge,0,sizeof(edge));        memset(in,0,sizeof(in));        memset(vis,0,sizeof(vis));  

        rear=0;for(int i=0;i<str.size();++i)if(str[i]!=' ')                dict[rear++]=str[i]-'a';        sort(dict,dict+rear);    

        getline(cin,str);   //输入偏序字母对        int cnt=0,pair[2];for(int i=0;i<str.size();++i)        {if(str[i]!=' ')            {                pair[cnt++]=str[i]-'a';if(cnt==2)                {                    edge[pair[0]][pair[1]]=1;in[pair[1]]++;   //入度数加1                    cnt=0;                }            }        }        topo_sort(0);        cout<<endl;    }return 0;}

转载于:https://www.cnblogs.com/mjc467621163/archive/2011/07/22/2114454.html

poj 1270 Following Orders相关推荐

  1. poj 1270(toposort)

    http://poj.org/problem?id=1270 题意:给一个字符串,然后再给你一些规则,要你把所有的情况都按照字典序进行输出. 思路:很明显这肯定要用到拓扑排序,当然看到discuss里 ...

  2. 修改 html file 文字,修改input标签type=file类型的文字

    Apworks框架实战 Apworks框架实战(一):Apworks到底是什么? Apworks框架实战(二):开始使用 Apworks框架实战(三):单元测试与持续集成 Apworks框架实战(四) ...

  3. 【转载】图论 500题——主要为hdu/poj/zoj

    转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...

  4. POJ前面的题目算法思路【转】

    1000 A+B Problem 送分题 49% 2005-5-7 1001 Exponentiation 高精度 85% 2005-5-7 1002 487-3279 n/a 90% 2005-5- ...

  5. POJ 超详细分类

    POJ 各题算法 1000    A+B Problem            送分题     49%    2005-5-7 1001    Exponentiation         高精度   ...

  6. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  7. 【HDOJ图论题集】【转】

    1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...

  8. 一系列图论问题[转]

    =============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...

  9. 图论练习题(存起来练)

    =============================以下是最小生成树+并查集======================================  [HDU]  1213 How Man ...

最新文章

  1. linux 为什么 c语言,为什么C程序里一定要写main函数
  2. Linux环境安装python3.6(APT方式)
  3. 前端开发js运算符单竖杠“|”的用法和作用及js数据处理
  4. Android 4.0屏蔽式多点触摸
  5. Android Activity启动模式总结
  6. 下载历史版本的 xCode
  7. 51 -算法 -LeetCode 53最大子序和 动态规划
  8. windos 为什么会突然服务停止了_女生为什么会突然说分手?
  9. table函数--Matplotlib
  10. Docker使用redis
  11. 最小二乘法(least squares)的曲线拟合(curve fitting)
  12. 数学常识--两点之间距离公式
  13. linux学习(跟着b站尚硅谷老师学习)
  14. 180亿美元估值,快手用什么来支撑?
  15. web前端 vue axios 网页设计
  16. 关于AndroBench在Android 10以后性能衰减的问题分析
  17. 《从点子到产品:产品经理的价值观与方法论》读后感
  18. VR全景展示是什么,VR全景展示的功能有哪些?
  19. PTA - 电话聊天狂人
  20. 【简历制作合集】面试时到底是用彩打简历还是黑白简历更出彩呢?|智测优聘出品

热门文章

  1. 【Python】http.client库的用法
  2. MongoDB入门(一)——数据库概述
  3. 201621123053《Java程序设计》第十四周学习笔记文章
  4. 单纯形法MATALAB实现
  5. 【版本更新】CAD组件Aspose.CAD 9月新版V17.9发布 | 支持IFC格式
  6. 【java】接口(interface)
  7. PHP5.3版本安装
  8. Arduino入门笔记(6):温度传感器及感温杯实验
  9. SystemCenter2012SP1实践(12)服务器、网络和存储配置
  10. Shuffling Machine (20)