POJ 1270 Following Orders (拓扑 + DFS回溯)
来源:互联网 发布:钱德勒宾 知乎 编辑:程序博客网 时间:2024/05/18 01:12
DFS搞了半天 , 仔细 思考 回溯 (每一次 都是 本层全新的状态) 加上记录方案
代码确实很挫
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<vector>using namespace std;#define max(a,b) (a)>(b)? (a):(b)#define min(a,b) (a)>(b)? (b):(a)#define INF 100000000#define N 100#define M 200vector<int> edge[N];char name[N];int ar_na;int in[N];int n,m;int dui[N];char str1[2*N];char str2[2*M];int vis[N];int head,tail;char ans[500][N];int ar_an;int ff(char ch){ for(int i=0;i<ar_na;i++) { if(name[i]==ch) return i; }}int cmp(const void *a,const void *b){ return ( strcmp( (char *)a,(char *)b));}void dfs(){ int i,j,k; int flag=0; while(head<tail) { int now=dui[head++]; for(j=0; j<edge[now].size(); j++) { int next=edge[now][j]; in[next]--; } } for(i=0;i<ar_na;i++) { if(in[i]==0 && !vis[i]) { flag=1; vis[i]=1; dui[tail++]=i; dfs(); tail--; int tem=dui[--head]; for(j=0;j<edge[tem].size();j++) { int tt=edge[tem][j]; in[tt]++; } vis[i]=0; } } if(!flag) { if(tail>=ar_na) { for(i=0;i<tail;i++) { ans[ar_an][i]=name[dui[i]]; } ans[ar_an][tail]='\0'; ar_an++; } return ; }}int main(){ //freopen("in.txt","r",stdin); int i,j,k; while(gets(str1)!=NULL) { int len=strlen(str1); ar_na=0; ar_an=0; memset(in,0,sizeof(in)); for(i=0;i<=N;i++) edge[i].clear(); memset(vis,0,sizeof(vis)); for(i=0;i<len;i++) { if(str1[i]!=' ') { name[ar_na++]=str1[i]; } } gets(str2); int len1=strlen(str2); int fl=0; int last,now; for(i=0;i<len1;i++) { if(str2[i]!=' ') { fl=!fl; if(fl) { last=ff(str2[i]); } else { now=ff(str2[i]); in[now]++; edge[last].push_back(now); } } } head=tail=0; dfs(); if(ar_an==0) puts(""); else { qsort(ans,ar_an,sizeof(char)*N,cmp); for(i=0;i<ar_an;i++) puts(ans[i]); } puts(""); } return 0;}
- POJ 1270 Following Orders (拓扑 + DFS回溯)
- POJ 1270Following Orders(拓扑+DFS)
- poj 1270 Following Orders(拓扑排序+dfs)
- Poj 1270 Following Orders【Dfs拓扑排序】
- poj 1270 Following Orders(DFS+拓扑排序)
- poj 1270&& uva 124 Following Orders(拓扑排序、DFS)
- POJ 1270 Following Orders(拓扑排序)
- poj 1270 Following Orders 拓扑
- POJ1270 Following Orders(拓扑排序+回溯)
- pku 1270 Following Orders DFS+拓扑排序
- POJ:1270 Following Orders (全拓扑排序)
- POJ 1270 Following Orders (拓扑排序)
- POJ 1270 Following Orders 拓扑排序
- POJ 1270 Following Orders 拓扑排序
- poj-1270 Following Orders(拓扑排序)
- poj1270Following Orders(拓扑排序+dfs回溯)
- POJ 1270 Following Orders(dfs/next_permutation())
- POJ 1270 Following Orders DFS 搜索
- 语录
- codeforces 336C Vasily the Bear and Sequence
- statistics_level参数说明
- MFC中CString转int/double/TCHAR*类型
- SSDT
- POJ 1270 Following Orders (拓扑 + DFS回溯)
- 八个移动产品设计必备网站
- char*,string,CString,int,char[]之间的转换
- ie overflow无效解决办法
- Java权限限制符的一些记录
- JRuby(学习 环境搭建 与 尝试)
- ACM 1001 Exponentiation 高精度幂浮点型的运算
- POJ2181(DP)
- 简单三步创建文字水彩肖像