ZOJ1004 && HDU1515 dfs回溯
题目大意:
就是通过一个栈进行字母入栈出栈得到想要的字符,把所有可能的方式全部输出
自己写的方法一开始一直不能过,后来参考了别人的方法,写出来的比较简单的代码
这段代码更有回溯的感觉,自己后来又把自己原来想法的代码写了一遍,终于写出来了,不过有点让人头晕
- #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回溯的更多相关文章
- 素数环(dfs+回溯)
题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...
- NOJ 1074 Hey Judge(DFS回溯)
Problem 1074: Hey Judge Time Limits: 1000 MS Memory Limits: 65536 KB 64-bit interger IO format: ...
- HDU 1016 Prime Ring Problem(经典DFS+回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)
哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- HDU1016 Prime Ring Problem(DFS回溯)
Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- uva 193 Graph Coloring(图染色 dfs回溯)
Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...
- P1074 靶形数独 dfs回溯法
题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...
- 剪格子---(dfs回溯)
如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以 ...
- 蓝桥杯 算法提高 8皇后·改 -- DFS 回溯
算法提高 8皇后·改 时间限制:1.0s 内存限制:256.0MB 问题描述 规则同8皇后问题,但是棋盘上每格都有一个数字,要求八皇后所在格子数字之和最大. 输入格式 一个8*8 ...
随机推荐
- DP Codeforces Round #260 (Div. 1) A. Boredom
题目传送门 /* 题意:选择a[k]然后a[k]-1和a[k]+1的全部删除,得到点数a[k],问最大点数 DP:状态转移方程:dp[i] = max (dp[i-1], dp[i-2] + (ll) ...
- ACM_求N^N的最高位数
Leftmost Digit Time Limit: 2000/1000ms (Java/Others) Problem Description: 给定一个正整数N,你应该输出N ^ N的最左边的数字 ...
- 嵌套查询--------关联一对多关系----------collection
参考来源: http://www.cnblogs.com/LvLoveYuForever/p/6689577.html <resultMap id="BaseResultMap&q ...
- 科普 eclipse中的Java build
在刚学eclipse的时候,build path是经常会用到的,但经常就是跟着教程走,额就不太懂这是干嘛的,然后今天看见极客视频里有相关的讲解,来记录一下. Build Path 是指定Java工程所 ...
- 文件及文件的操作-读、写、追加的t和b模式
1.什么是文件? 文件是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位. 文件的操作核心:读和写 对文件进行读写操作就是向操作系统发出指令,操作系统将用户或者应用程序对文件的读写操作转换为具体的 ...
- JS获取服务器端控件ID
很多时候我们需要在JS中对服务器端控件进行一些简单处理,但是这个时候没有必要回发到服务器,让服务器去处理,这个时候就又要用到JS了 那么怎么去获取这个服务器端控件呢?我们知道服务器最终返回到用户界面的 ...
- linux centos7 tomcat8 配置成服务启动
1. tomact 解压到/usr/local/tomcat下 2.vim /usr/local/tomcat/bin/catalina.sh 在OS specific support.前加上 (注意 ...
- 使用Qt5.7.0 VS2015版本生成兼容XP的可执行程序
版权声明:本文为灿哥哥http://blog.csdn.net/caoshangpa原创文章,转载请标明出处. 一.直接使用VS2012/VS2013/VS2015生成XP兼容的可执行程序 Visua ...
- webstorm快捷键大全-webstorm常用快捷键
默认配置下的常用快捷键,提高代码编写效率,离不开快捷键的使用,Webstorm拥有丰富的代码快速编辑功能,你可以自由配置功能快捷键. Webstorm预置了其他编辑器的快捷键配置,可以点击 查找/代替 ...
- boostrapvalidator
一个例子 <%@ page contentType="text/html;charset=UTF-8" language="java" %> < ...