首页 > 其他 > 详细

ZOJ 1004 Anagrams by Stack

时间:2018-04-29 23:44:09      阅读:267      评论:0      收藏:0      [点我收藏+]

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

原文:https://www.cnblogs.com/jinjin-2018/p/8972358.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!