POJ1270【拓扑排序+DFS】
来源:互联网 发布:如何下载软件 编辑:程序博客网 时间:2024/05/18 15:05
题意:
先给你一个字符串,让你给他们排序;
再给你一行,在这一行,每两个就是第一个需要在第二个前面;
思路:
//DFS写多了感觉好有啊,就是排序过程中可能会有多种情况。
//我们考虑一下怎么排好一个位置,这个位置可能有多个东西可以占,那么这些东西对于这个位置都是等价的,
//那么我们可以采用深搜下+回溯来解决。
//其实还是蛮简单的
code:
#include<cstdio>#include<string.h>#include<iostream>#include<algorithm>using namespace std;char ans[30];char ss[30];char s[100];int ma[30][30];int pre[30];int gg[200];int num;void tuopu(int u){ if(u==num) { ans[u]='\0'; printf("%s\n",ans); return; } for(int i=0;i<num;i++) { if(pre[i]==0) { ans[u]=ss[i]; pre[i]--; for(int j=0;j<num;j++) { if(ma[i][j]) { pre[j]--; } } tuopu(u+1); //回溯; pre[i]++; for(int j=0;j<num;j++) { if(ma[i][j]) { pre[j]++; } } } }}int main(){ while(gets(s)) { int L=strlen(s); num=0; for(int i=0;i<L;i++) { if(s[i]>='a'&&s[i]<='z') { ss[num++]=s[i]; } } ss[num]='\0'; sort(ss,ss+num); for(int i=0;i<num;i++) { gg[ss[i]]=i; } char s1[110]; gets(s1); int LL=strlen(s1); int j1,j2,flag; flag=0; memset(pre,0,sizeof(pre)); memset(ma,0,sizeof(ma)); for(int i=0;i<LL;i++) { if(s1[i]<'a'||s1[i]>'z') continue; if(!flag) { j1=s1[i]; flag=1; } else { j2=s1[i]; ma[gg[j1]][gg[j2]]=1; pre[gg[j2]]++; flag=0; } } tuopu(0); puts(""); } return 0;}/*a b f ga b b fv w x y zv y x v z v w v*/
0 0
- POJ1270【拓扑排序+DFS】
- 拓扑排序+DFS(POJ1270)
- poj1270拓扑排序
- POJ1270 Following Orders(拓扑排序)
- POJ1270 Following Orders(拓扑排序+回溯)
- poj1270 DFS
- poj1270 Following Orders (拓扑排序+回溯输出路径)
- 拓扑排序+DFS
- poj1128 拓扑排序+DFS
- 拓扑排序-DFS
- DFS,拓扑排序
- 拓扑排序 dfs
- hdoj538Ponds【dfs+拓扑排序】
- DFS拓扑排序
- 拓扑排序DFS做法
- 拓扑排序--dfs
- 拓扑排序 基于DFS
- poj 1094 DFS--》拓扑排序
- MySql避免重复插入记录
- 银行不良资产问题日益严重,政府需挑选出来:辛哈
- sybase服务器启动时报错:无法启动服务器,错误1053:服务没有及时相应启动或控制请求
- iOS开发Xcode6添加.pch
- C# 获取图片某像素点RGB565值
- POJ1270【拓扑排序+DFS】
- Mysql学习——MySQL导入导出.sql文件及常用命令
- Jacob操作office文档(Word,PPT,Excel)
- 表值函数
- Win8下 OPENCV3.1 配置CUDA7.5+opencv_contrib
- 汇编Jmp指令总结
- Mysql各种类型字段长度
- leetcode 198. House Robber
- QNX Bootloader 启动顺序