题目大意:

就是通过一个栈进行字母入栈出栈得到想要的字符,把所有可能的方式全部输出

自己写的方法一开始一直不能过,后来参考了别人的方法,写出来的比较简单的代码

这段代码更有回溯的感觉,自己后来又把自己原来想法的代码写了一遍,终于写出来了,不过有点让人头晕

 #include <cstdio>
#include <cstring>
#include <stack>
using namespace std;
stack<char> s;
char str1[],str2[],io[];
int n,m;
void dfs(int x,int y,int cnt)
{
if(y==m){
// printf("%c ",io[0]);
for(int i=;i<cnt;i++)
printf("%c ",io[i]);
puts("");
return;
} if(x<n){
io[cnt]='i';
s.push(str1[x]);
dfs(x+,y,cnt+);
s.pop();
} if(!s.empty() && s.top() == str2[y]){
io[cnt]='o';
char a = s.top();
s.pop();
dfs(x,y+,cnt+);
s.push(a);
}
}
int main()
{
while(~scanf("%s%s",str1,str2)){
puts("["); n=strlen(str1);
m=strlen(str2);
//printf("%d %d\n",n,m);
while(!s.empty())
s.pop(); dfs(,,); puts("]");
}
return ;
}

不断传入出栈的值和对应的str2上的字符进行比较,只有一只匹配正确才继续,若匹配成功最后一个字符,就输出io[]保存的过程字符

k表示保存了k个过程符,x表示str1入栈了x个字符,y表示比较到了str2的第y个字符

自己写的过程中因为想不到上面那么好的思路,就有点乱,防止数组越界,只能不断加各种限制,自己的思路想想应该还是只有自己看得懂吧~~

 #include <cstdio>
#include <cstring>
#include <stack>
using namespace std; stack<char> s;
char str1[] , str2[] , io[];
int n,m; void dfs(char a,int k,int x,int y)
{
if(y>){
if(a != str2[y-])
return; else if(y == m){
for(int i=;i<k;i++)
printf("%c ",io[i]);
puts("");
return;
}
} if(y>=m)
return; if(s.empty()){
if(x>=n)
return;
io[k] = 'i';
s.push(str1[x]);
dfs(a,k+,x+,y);
s.pop();
}
else{
if(x<n){
io[k] = 'i';
s.push(str1[x]);
dfs(a,k+,x+,y);
s.pop();
} io[k]='o';
char b = s.top();
s.pop();
dfs(b,k+,x,y+);
s.push(b);
}
} int main()
{
while(~scanf("%s%s",str1,str2)){
puts("["); n=strlen(str1);
m=strlen(str2);
//printf("%d %d\n",n,m);
while(!s.empty())
s.pop(); dfs('a',,,); puts("]");
}
return ;
}

ZOJ1004 && HDU1515 dfs回溯的更多相关文章

  1. 素数环(dfs+回溯)

    题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...

  2. NOJ 1074 Hey Judge(DFS回溯)

    Problem 1074: Hey Judge Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  3. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. HDU1016 Prime Ring Problem(DFS回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. uva 193 Graph Coloring(图染色 dfs回溯)

    Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...

  7. P1074 靶形数独 dfs回溯法

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  8. 剪格子---(dfs回溯)

    如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以 ...

  9. 蓝桥杯 算法提高 8皇后·改 -- DFS 回溯

      算法提高 8皇后·改   时间限制:1.0s   内存限制:256.0MB      问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8 ...

随机推荐

  1. synchronized(3)修饰语句块之:synchronized(一般对象)

    synchronized(一般对象) 一次只有一个线程进入该代码块.此时,线程获得的是成员锁.例如: public class Thread7 { private Object xlock = new ...

  2. Android 内存溢出处理方案

    转自 : http://www.cnblogs.com/hello-ruby/archive/2013/04/19/3031098.html 首先我们来看看android内存溢出的原因,有可能是: 由 ...

  3. 446 Arithmetic Slices II - Subsequence 算数切片之二 - 子序列

    详见:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/description/ C++: class Solution { ...

  4. 419 Battleships in a Board 甲板上的战舰

    给定一个二维的甲板, 请计算其中有多少艘战舰. 战舰用 'X'表示,空位用 '.'表示. 你需要遵守以下规则:    给你一个有效的甲板,仅由战舰或者空位组成.    战舰只能水平或者垂直放置.换句话 ...

  5. 173 Binary Search Tree Iterator 二叉搜索树迭代器

    实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器.调用 next() 将返回二叉搜索树中的下一个最小的数.注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 ...

  6. rhel7安装oracle 11gR2,所需的依赖包

    binutils-2.23.52.0.1-30.el7.x86_64 compat-libstdc++-33-3.2.3-61.x86_64compat-libstdc++-33-3.2.3-61.i ...

  7. 在阿里云上搭建nginx + ThinkPHP 的实践

    作为一个程序猿,理应用linux系统来作为平时的工作机环境,哎,之前倒是用过一段时间的linux,可惜后来换了本本,后来竟然没有保持,嗷嗷后悔中... 废话不多说,大家用windows的理由都一样,但 ...

  8. git ---合并和删除分支

    git merge  分支名 //合并子分支到当前分支 git branch -d 分支名//删除分支

  9. MySQL学习随笔--视图

    视图概念 数据库中的视图指的是一个虚拟表,其内容由查询定义.同真实的表一样,视图也是由行与列构成的.视图的数据来源由SQL语句查询得到,不存储数据 视图创建方法 格式 : create view 视图 ...

  10. zabbix3.0.4 部署之八 (zabbix3.0.4 报警前端配置)

    (如何让报警信息推送----微信.邮件)(邮件与微信一样就不在重复) 创建一个用户 将用户加入administrator组 添加之前设置的报警媒介脚本 设置报警等级 创建动作 配置报警内容 设置报警条 ...