深搜———ZOJ 1004:anagrams by stack
细节问题各种虐!!
其实就是简单的一个深搜
看成二叉树来理解:每个节点有两个枝:入栈和出栈。
剪枝操作:只有当栈顶元素和当前位置的目标字符相同时才出栈,否则就不出栈
dfs写三个参数:depth搜索深度,npush压栈数,npop出栈数
npush用于记录压栈数:主要判断当前压栈是否合理,以及要压入的元素在原串种的位置
npop用于记录出栈数:判断生成的目标串元素的位置
当npush==npop==目标串时,说明生成了一个可执行的操作串
注意输出操作串的时候一定要用depth参数来控制,因为在多次输入时string 的最大长度已经改变,只有利用depth才能确定该字符串的那一部分是当前所生成的。
贴代码!
# include<iostream>
# include<string>
# include<cstdio>
# include<cstring>
using namespace std; string source;
string target; char solution[];
char s[]; int top; void dfs(int depth, int npush, int npop)
{
if (npush == target.length() && npop == target.length())
{
for (int i = ; i < depth; i++)
{
cout << solution[i]<<" ";
}
cout << endl;
return;
} if (npush < target.length())
{
s[top++] = source[npush];
solution[depth] = 'i';
dfs(depth + , npush + , npop);
top--;
} if (top > && s[top - ] == target[npop])
{
solution[depth] = 'o';
char temp = s[top - ];
top--;
dfs(depth + , npush, npop + );
s[top++] = temp;
} return; } int main()
{
while (cin>>source>>target)
{
top = ;
cout << "[" << endl;
if (source.length() == target.length())
dfs(,,);
cout << "]" << endl;
} return ;
}
深搜———ZOJ 1004:anagrams by stack的更多相关文章
- stack+DFS ZOJ 1004 Anagrams by Stack
题目传送门 /* stack 容器的应用: 要求字典序升序输出,所以先搜索入栈的 然后逐个判断是否满足答案,若不满足,回溯继续搜索,输出所有符合的结果 */ #include <cstdio&g ...
- ZOJ 1004 Anagrams by Stack
Anagrams by Stack 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004 题意:通过堆栈实现将一 ...
- ZOJ 1004 Anagrams by Stack(DFS+数据结构)
Anagrams by Stack 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4 题目大意:输入两个字符串序列,判 ...
- [ZOJ 1004] Anagrams by Stack (简单搜索)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004 题目大意:给你个栈,给你源串和目标串,按字典序输出符合要求 ...
- [ZJU 1004] Anagrams by Stack
ZOJ Problem Set - 1004 Anagrams by Stack Time Limit: 2 Seconds Memory Limit: 65536 KB How can a ...
- 1004 Anagrams by Stack
考察DFS的应用,用栈描述字符串的变化过程. #include <stdio.h> #include <string.h> int len1,len2; ],str2[],st ...
- Anagrams by Stack(深度优先搜索)
ZOJ Problem Set - 1004 Anagrams by Stack Time Limit: 2 Seconds Memory Limit: 65536 KB How can a ...
- 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)
题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...
- ZOJ(ZJU) 1002 Fire Net(深搜)
Suppose that we have a square city with straight streets. A map of a city is a square board with n r ...
随机推荐
- TextWatcher
对于一些需求,如非法字符限制(例如不允许输入#号,如果输入了#给出错误提示),做成动态判断更方便一些,而且容易扩展: 在Android里使用TextWatcher接口可以很方便的对EditText进行 ...
- Cobertura + jenkins 单元测试代码覆盖率统计
1.新建一个maven工程,在src/main/java 下建一个CoverageTest.java 类 package test_junit; public class CoverageTest { ...
- js解决跨站点脚本编制问题
1.前台处理(容易绕过): <script type="text/javascript"> $(document).ready(function(){ var url= ...
- centos中安装openjdk
openjdk的java环境还是简单好用,至于其他的,现在又用不到,为啥要费事安装它们? 步骤: 1.yum search java | grep jdk [root@noi ~]# yum sear ...
- Atitit. Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g
Atitit. Gui控件and面板----程序快速启动区--最佳实践Launchy ObjectDock-o0g 两个方式::: 键盘式::先用热键呼叫出QS,然后开始输入程序中的部分字母,按En ...
- java 高精度 四则运算
java的大数处理对于ACM中的大数来说,相当的简单啊: 整数的运算 BigInteger 小数的运算 BigDecimal 导入类: import java.util.Scanner; im ...
- 孙源即将分享 DynamicCocoa 实现细节
孙源即将分享 DynamicCocoa 实现细节 我的公众号之前发的一文中提到滴滴做了一个很牛逼的动态化方案 DynamicCocoa.该方案设计得非常精巧,解决了两种不同的语言在代码上如何等价生 ...
- Spring Oauth2 with JWT Sample
https://www.javacodegeeks.com/2016/04/spring-oauth2-jwt-sample.html ******************************** ...
- 为什么 Windows API 使用 stdcall 调用约定?
作者:知乎用户链接:https://www.zhihu.com/question/31453641/answer/52001143来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- EasyUI 另一种form提交方式
(function ($) { window.XW = {}; //全局系统对象 //异步请求统一调用方法 XW.ajax = function (options, param, callback) ...