拓扑排序+DFS(POJ1270)
2016-04-21 16:38
274 查看
【日后练手】(非解题)
拓扑排序+DFS(POJ1270)
拓扑排序+DFS(POJ1270)
#include<stdio.h> #include<iostream> #include<cstdio> #include<queue> #include <vector> #include<map> #include<stack> #include<cmath> #include<cstring> #include<cstdlib> #include<climits> #include<algorithm> using namespace std; #define LL long long #define PI acos(-1.0) #define ING 0x7fffffff #define INF 0x3f3f3f3f #define DA 100005 #define N 1010 bool ma[40][40]; int pre[40]; map<char,int>gg; int rsk; char ans[40]; char da[30]; void tuopu(int sum) { if(sum==rsk) { printf("%s\n",ans); return; } for(int i=0;i<rsk;i++) { if(pre[i]==0) { pre[i]--; ans[sum]=da[i]; for(int j=0;j<rsk;j++) { if(ma[i][j]) { pre[j]--; } } tuopu(sum+1); pre[i]++; for(int j=0;j<rsk;j++) { if(ma[i][j]) pre[j]++; } } } } int main() { char c; char s1[55]; char s[55]; while(gets(s1)) { int flat=0; int lg=strlen(s1); int num=0; for(int i=0;i<lg;i++) { if(s1[i]>='a'&&s1[i]<='z') da[num++]=s1[i]; } // da[num]='\0'; rsk=num; sort(da,da+num); for(int i=0;i<num;i++) gg[da[i]]=i; gets(s); int len=strlen(s); int j1,j2; memset(pre,0,sizeof(pre)); memset(ma,0,sizeof(ma)); for(int i=0;i<len;i++) { if(s[i]>='a'&&s[i]<='z') { if(flat==0) { j1=s[i]; flat=1; } else { j2=s[i]; ma[gg[j1]][gg[j2]]=1; pre[gg[j2]]++; flat=0; } } } memset(ans,0,sizeof(ans)); tuopu(0); printf("\n"); } return 0; }
相关文章推荐
- c++11 auto
- http协议详解
- 阻止表单提交按钮多次提交
- 这样吃饭,其实是在喂养身体里的“癌细胞”
- 编写代码遇到的问题
- 七、备忘录模式Memento(行为型模式)
- AVL树原理通俗解释与例子
- 在Xcode中使用Git进行源码版本控制
- 欢迎使用CSDN-markdown编辑器
- OpenCV学习笔记(七)—— OpenCV for Android实时图像处理
- 手机归属地及卡类型信息接口(python版)
- hibernate注解多字段查询
- VB 求余数和商
- [改善Java代码]break万万不可忘
- 团队第一阶段站立会议03
- Web开发框架
- 字段这一列中的“美国”全部替换成“中国”,字段里可以是比较长的内容
- CentOS + PyCharm 环境下使用 LIBSVM(及 unresolved reference 问题的解决)
- PC_Lint在source insight中的集成与配置
- 两位数乘以两位数