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

解题报告:

①方法:完全二叉树的搜索方式,回溯法。

②代码解释:

1、可以一直入栈,当不能入栈的时候,就只能出栈了。

2、先入栈,再出栈。保证堆栈弹出的时候不为空。

3、当dfs(i,j)完成之后(i>1),可以进行出栈操作的时候,进行dfs(i,j+1),来逼近答案。

#include <iostream>
#include <string>
#include <algorithm>
#include <stack>
#include <vector> using namespace std; string a,b;///原单词和目标单词; stack <char> build;///构造目标字符串
vector <char> operate;///记录出入栈操作
int len;///字符串a长度 ///iPush表示入栈操作的次数,iPop表示出栈操作的次数;
void dfs(int iPush,int iPop)
{
///当出入栈操作的次数刚好等于字符串长度时,目标单词构造完成。
if(iPush==len&&iPop==len)
{
for(int i=;i<operate.size();i++)
cout<<operate[i]<<" ";
cout<<endl;
}
///入栈操作;
if(iPush+<=len)
{
build.push(a[iPush]);
operate.push_back('i');
dfs(iPush+,iPop);
build.pop();
operate.pop_back();
}
///出栈操作;
if(iPop+<=iPush&&iPop+<=len&&build.top()==b[iPop])
{
char tc=build.top();
build.pop();
operate.push_back('o');
dfs(iPush,iPop+);
build.push(tc);
operate.pop_back();
}
} int main()
{
while(cin>>a>>b)
{
len=a.length();
cout<<"["<<endl;
dfs(,);
cout<<"]"<<endl;
}
return ;
}

模拟栈的回溯,完全二叉树搜索,(ZOJ1004)的更多相关文章

  1. ACM/ICPC 之 用双向链表 or 模拟栈 解“栈混洗”问题-火车调度(TSH OJ - Train)

    本篇用双向链表和模拟栈混洗过程两种解答方式具体解答“栈混洗”的应用问题 有关栈混洗的定义和解释在此篇:手记-栈与队列相关 列车调度(Train) 描述 某列车调度站的铁道联接结构如Figure 1所示 ...

  2. java 16 - 5 LinkedList模拟栈数据结构的集合

    请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. package cn_LinkedList; impo ...

  3. hdu 4699 Editor 模拟栈

    思路:刚开始用STL中的栈,一直RE……,之后改为手动模拟栈操作,在注意点细节就可以了!!! 代码如下: #include<cstdio> #include<cstring> ...

  4. 【DataStructure In Python】Python模拟栈和队列

    用Python模拟栈和队列主要是利用List,当然也可以使用collection的deque.以下内容为栈: #! /usr/bin/env python # DataStructure Stack ...

  5. 第一回写的用arraylist模拟栈操作

    package hashMap; import java.util.ArrayList; import d.Student; /** * 用ArrayList模拟栈操作 * @author zhuji ...

  6. HDOJ/HDU 1022 Train Problem I(模拟栈)

    Problem Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot o ...

  7. c语言学习,模拟栈操作

    1.stack.c模拟栈操作函数的实现 #include<stdio.h> #include<stdlib.h> ; static char *stack;//数据栈 ;//栈 ...

  8. KEILC51可重入函数及模拟栈浅析

    MARK:文章中的红色部分是个人的理解. KEILC51可重入函数及模拟栈浅析 关键字:keilc51,模拟堆栈,可重入函数调用,参数传递,C?XBP,C?ADDXBP 摘要:本文较详细的介绍了kei ...

  9. 使用golang的slice来模拟栈

    slice(切片):底层数据结构是数组 stack(栈):一种先进后出的数据结构 普通版的模拟写入和读取的栈 package main import "fmt" //栈的特点是先进 ...

随机推荐

  1. linux 7.0+救援模式

    输入“e”进入GRUB页面! 定位到ro 然后修改ro为rw,并添加如下红框内的命令行! 使用下面的提示使用“Ctrl-x”start!!! 进入系统后,其实只是进入了一个安全模式下的内存系统,并不是 ...

  2. vue之mapMutaions的使用 && vuex中 action 用法示例 && api.js的使用

    vue之mapMutations的使用 我们通过Mutation来改变store中的state,方法往往是在子组件中使用 this.$store.commit(); 来实现,但是这样的缺点是不容易查看 ...

  3. TOJ 4393 Game

    描述 Bob always plays game with Alice.Today,they are playing a game on a tree.Alice has m1 stones,Bob ...

  4. java多线程之join方法使用

    看这篇博客:http://www.cnblogs.com/skywang12345/p/3479275.html

  5. linux下安装redis及PHP扩展应用

    一.redis安装 1 下载redis安装包 wget http://redis.googlecode.com/files/redis-2.4.17.tar.gz (若无法下载请手动下载) 2 编译安 ...

  6. NSTimer_Block封装定时器的target-action成Block回调

    前言 定时器NSTimer虽然简单易用,但是目标响应机制(target-action)这种方式很容易在代码中出现代码臃肿的情况,特别是在一个文件中有大量的代码,多个定时器的时候不方便调试,因此将NST ...

  7. Pygame 加载音频

    Python Learning:Pygame 加载音频 Python 中自带的 winsound 模块 winsound 模块中 Beep 方法可以调用系统的蜂鸣器,接受一个为 frequency 的 ...

  8. nyoj 456——邮票分你一半——————【背包思想搜索】

    邮票分你一半 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述      小珂最近收集了些邮票,他想把其中的一些给他的好朋友小明.每张邮票上都有分值,他们想把这些邮票分 ...

  9. git提交代码报错 trailing whitespace的解决方法

    1. git提交代码报错 trailing whitespace 禁止执行pre-commit脚本 进入到项目目录中 chmod a-x .git/hooks/pre-commit 2.git提交代码 ...

  10. [转]微信小程序安全浅析

    本文转自:http://blog.csdn.net/baize_security/article/details/54582854 引言 近期微信小程序重磅发布,在互联网界掀起不小的波澜,已有许多公司 ...