【dfs 回溯】 zoj 1004
题意:给出一个源字符串和一个目标字符串,打出所有符合stack操作的i,o串使得对于源字符串的操作能变为目标字符串
思路:搜索,回溯。
之前想过是不是队列,觉得不对那样bfs是求最优解了;也想过用结构体数组来保存访问过的i,o操作序列,也是越写越麻烦,自己把自己绕进去了。
参考了网上的一篇博客,思路特别清晰。
回溯嘛...访问时进入下一个函数循环体,而函数体后认为并没有访问即可
反映到这道题上,如果是入栈操作,在func(s)后怎么入的就怎么弹出来,参数全置到未入栈之前的操作即可,出栈同理。
#include <cstdio>
#include <iostream>
#include <stack>
#include <cstring>
using namespace std;
];//来源字符串
];//目标字符串
];//记录步骤的字符数组
int steplen,sp,tp,n;//sp:字符在sword中的位置,tp:记录字符在tword中的位置
void func(stack&s)
{
char ch;
int i;
if(tp==n)//与目标字符串校对完成,所以step必然是正确的
{
;i
{
cout<<step[i]<<" ";
}
cout<<endl;
return;
}
if(sp
{
s.push(sword[sp++]);
step[steplen++]='i';
func(s);
s.pop();
steplen--;
sp--;
}
if(!s.empty())//栈s不为空时,对比栈头和当前目标字符
{ //如果相等,便产生输出o
ch=s.top();
if(ch==tword[tp])
{
s.pop();
tp++;
step[steplen++]='o';
func(s);
steplen--;
tp--;
s.push(ch);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
stack str;
while(cin >> sword >> tword)
{
cout << "[" << endl;
n=strlen(sword);
if(n==strlen(tword))
{
sp=;
tp=;
steplen=;
func(str);
}
cout<<"]"<<endl;
}
;
}
【dfs 回溯】 zoj 1004的更多相关文章
- 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 题意:通过堆栈实现将一 ...
- 素数环(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 的格子中的整数,是否可以 ...
随机推荐
- apache动态编译与静态编译
静态: 在使用./configure 编译的时候,如果不指定某个模块为动态,即没有使用:enable-mods-shared=module或者enable-module=shared 这个2个中的一个 ...
- java 读取excel 正常 xls
package com.sun.test; import java.io.BufferedInputStream;import java.io.File;import java.io.FileInpu ...
- mybatis 批量插入值的sql
<insert id="insertAwardPic" useGeneratedKeys="true" parameterType="java. ...
- jquery之全选全不选
<input type="checkbox" onclick="selall(this)" />全选/全不选 <input type=&quo ...
- Spring自动扫描
需要在Springde 配置文件中加入 <context:component-scan base-package="com.annoation"> base-packa ...
- jQuery 事件 - bind() 方法
定义和用法 bind() 方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数. 实例1(一个事件) 记得把js引用地址换掉 当点击鼠标时,隐藏或显示 p 元素: <html&g ...
- NSBundle、UIImageView和UIButton对比、Xcode文档安装路径、Xcode模拟器安装路径
1.NSBundle1> 一个NSBundle代表一个文件夹,利用NSBundle能访问对应的文件夹2> 利用mainBundle就可以访问软件资源包中的任何资源3> 模拟器应用程序 ...
- tableview选择的时候不要cell的高亮显示样式
1.若用方法: //-(BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)ind ...
- HeapSpray初窥(2014.12)
注:环境是xp+ie8 1.HeapSpray简介 Windows的堆因为动态分配和释放的特点,其看起来是不连续(没有规律的),但是仍可以找到一定的规律:大量的连续分配会更倾向使用连续的地址,减少了碎 ...
- JAVA常识积累
java Class<? extends Object> getClass() 这么写是什么意思 Class<? extends Object> 泛型Object以及Objec ...