hdu 1515 Anagrams by Stack

本文介绍了一种使用深度优先搜索(DFS)算法解决字符串匹配问题的方法,具体为判断一个字符串是否能通过入栈和出栈操作转换为另一个目标字符串。文章详细解释了算法的实现过程,包括如何通过递归调用进行回溯,以及如何确保所有可能的操作路径都被探索。此外,还提供了一份C++代码示例,帮助读者更好地理解算法的具体应用。

题目大意:

给你两个字符串,问:第一个字符串按入栈出栈规则,能否达到第二个字符串,输出所有的方法,i表示入栈,o表示出栈。

解题思路:DFS(深度优先搜索)

注意事项:

1、要注意回溯

2、要理清思路

 

View Code
 1 #include <iostream>
 2 #include <stdlib.h>
 3 #include <memory.h>
 4 
 5 using namespace std;
 6 char op[110];
 7 char ch1[110],ch2[110];
 8 char st1[110];
 9 int len,k;
10 
11 void dfs(int top1,int top2,int n){
12      char t;
13      if(top2 == len){
14              for(int i=0;i<k;i++){
15                      printf("%c ",op[i]);
16              }
17              printf("\n");
18              return;
19      }
20      if(n<len){
21      t = st1[top1+1];
22      st1[top1+1] = ch1[n];
23      op[k++] = 'i';
24      dfs(top1+1,top2,n+1);
25      k--;
26      st1[top1+1] = t;
27      }
28      if(st1[top1] == ch2[top2]){
29                   op[k++] = 'o';
30                     dfs(top1-1,top2+1,n);
31                     k--;
32      }
33 }
34      
35 int main(){
36     while(~scanf("%s%s",ch1,ch2)){
37           k=0;
38           len = strlen(ch1);
39           memset(st1,0,sizeof(st1));
40           printf("[\n");
41           dfs(0,0,0);
42           printf("]\n");
43     }
44     return 0;
45 }


总结:

对于能用深搜的题目,我们要分清楚当前所有的选择,并对当前所有的选择都要进行一次遍历,这样才能能将所有的情况都遍历一遍,寻找到最后的结果。

转载于:https://www.cnblogs.com/AlienForce/archive/2012/04/27/2473190.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值