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 ...
随机推荐
- GC_CONCURRENT freed 循环不停打印日志
打印类似如下语句: 03-07 19:21:49.562: D/dalvikvm(1677): GC_CONCURRENT freed 2859K, 20% free 12020K/15011K, p ...
- 437 Path Sum III 路径总和 III
给定一个二叉树,二叉树的每个节点含有一个整数.找出路径和等于给定数的路径总数.路径不需要从根节点开始,也不需要在叶节点结束,当路径方向必须是向下的(只从父节点到子节点).二叉树不超过1000个节点,节 ...
- 216 Combination Sum III 组合总和 III
找出所有可能的 k 个数,使其相加之和为 n,只允许使用数字1-9,并且每一种组合中的数字是唯一的.示例 1:输入: k = 3, n = 7输出:[[1,2,4]]示例 2:输入: k = 3, n ...
- sdut2784&cf 126b Good Luck!(next数组)
链接 next数组的巧妙应用 学弟出给学弟的学弟的题.. 求最长的 是前缀也是后缀同时也是中缀的串 next的数组求的就是最长的前后缀 但是却不能求得中缀 所以这里 就把尾部去掉之后再求 这样就可 ...
- React全家桶之一 react-router之高级
使用query获取URL中的参数 //引入相关的依赖 const Page = props => <div> <h1>{props.location.query.mess ...
- R in action读书笔记(21)第十六章 高级图形进阶(上)
16.1 R 中的四种图形系统 基础图形函数可自动调用,而grid和lattice函数的调用必须要加载相应的包(如library(lattice)).要调用ggplot2函数需下载并安装该包(inst ...
- spring-mvc hello world (1)
我学习一个程序,都是从DEMO开始的. 先不了解SPRING-MVC的原理,但一些小的概念还是需要了解的.由于之前有过SSH的工程经验,故基本的东东,不在叙述. 1.准备环境 JAR包:
- 网站推广--Html关键词代码解说
html的meta标签 1. meta标签是内嵌在你网页中的特殊html标签,包含着你有关于你网页的一些隐藏信息.Meat标签的作用是向搜索引擎解释你的网页是有关哪方面信息的.对于高级的搜索引擎来说, ...
- Java EE 目标
在大三上学期学习了Java se,只是简单的学习了语法,而且没有及时的复习巩固,语法知识已经忘了许多.在这个新学期,又有了Java EE这门课,书上的内容是从没学习过的新知识,只是在网站上看到过像Sp ...
- mysql 常用的语句
1.查出当前的字段,放到一个字段中:GROUP_CONCAT(distinct b.patent_ip) ,如 (select GROUP_CONCAT(distinct b.patent_ip) f ...