ZOJ 1004 Anagrams by Stack

Posted jinjin-2018

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZOJ 1004 Anagrams by Stack相关的知识,希望对你有一定的参考价值。

Anagrams by Stack

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004

题意:通过堆栈实现将一个字符串转变成目标字符串的操作,要求输出全部的可能操作组合。

思路:利用深度优先的搜索思路,对于每一个状态都有入栈和出栈两种可能的操作,由于要求按字典序输出,每次先考虑入栈再考虑出栈。即“能入就入,不能入考虑是否能退,随后返回上一步”。

下面贴代码:

 1 //Problem Name: Anagrams by Stack
 2 //Source: ZOJ 1004
 3 //Author: jinjin18
 4 //Main idea: DFS
 5 //Language: C++
 6 //=========================================================
 7 #include<stdio.h>
 8 #include<string.h>
 9 
10 char origin[1000];
11 char target[1000];
12 char temp[1000];
13 int top = -1;
14 char opt[2005];
15 int iopt;
16 int popn,pushn;
17 int len;
18 void DFS(){
19     if(popn == len){
20         for(int i = 0; i < 2*len; i++){
21             printf("%c ",opt[i]);
22         }
23         printf("\n");
24         return ;
25     }
26 
27     if(pushn < len){
28         top++;
29         temp[top] = origin[pushn];
30         pushn++;
31         opt[iopt] = i;
32         iopt++;
33         DFS();
34         iopt--;
35         top--;
36         pushn--;
37     }
38 
39     if(popn < pushn&& temp[top] == target[popn]){
40         top--;
41         popn++;
42         opt[iopt] = o;
43         iopt++;
44         DFS();
45         iopt--;
46         top++;
47         popn--;
48         temp[top] = target[popn];  //保护现场
49     }
50     return ;
51 }
52 
53 int main(){
54 
55 
56     while(scanf("%s%s",origin,target)!=EOF){
57         popn = pushn = 0;
58         iopt = 0;
59         len = strlen(origin);
60         printf("[\n");
61         DFS();
62         printf("]\n");
63     }
64 
65     return 0;
66 }

 

以上是关于ZOJ 1004 Anagrams by Stack的主要内容,如果未能解决你的问题,请参考以下文章

ZOJ 1004 Anagrams by Stack

12Anagrams by Stack

Anagrams by Stack(STL)

Anagrams by Stack(STL)

Anagrams by Stack(STL)

Java - 迭代 ArrayList 并查找 Anagrams