题意:给出一个源字符串和一个目标字符串,打出所有符合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的更多相关文章

  1. stack+DFS ZOJ 1004 Anagrams by Stack

    题目传送门 /* stack 容器的应用: 要求字典序升序输出,所以先搜索入栈的 然后逐个判断是否满足答案,若不满足,回溯继续搜索,输出所有符合的结果 */ #include <cstdio&g ...

  2. ZOJ 1004 Anagrams by Stack

    Anagrams by Stack 题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1004 题意:通过堆栈实现将一 ...

  3. 素数环(dfs+回溯)

    题目描述: 输入正整数n,把整数1,2...n组成一个环,使得相邻两个数和为素数.输出时从整数1开始逆时针排列并且不能重复: 例样输入: 6 例样输出: 1 4 3 2 5 6 1 6 5 2 3 4 ...

  4. NOJ 1074 Hey Judge(DFS回溯)

    Problem 1074: Hey Judge Time Limits:  1000 MS   Memory Limits:  65536 KB 64-bit interger IO format: ...

  5. HDU 1016 Prime Ring Problem(经典DFS+回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  6. HDU 2181 哈密顿绕行世界问题(经典DFS+回溯)

    哈密顿绕行世界问题 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  7. HDU1016 Prime Ring Problem(DFS回溯)

    Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  8. uva 193 Graph Coloring(图染色 dfs回溯)

    Description You are to write a program that tries to find an optimal coloring for a given graph. Col ...

  9. P1074 靶形数独 dfs回溯法

    题目描述 小城和小华都是热爱数学的好学生,最近,他们不约而同地迷上了数独游戏,好胜的他们想用数独来一比高低.但普通的数独对他们来说都过于简单了,于是他们向 Z 博士请教,Z 博士拿出了他最近发明的“靶 ...

  10. 剪格子---(dfs回溯)

    如图p1.jpg所示,3 x 3 的格子中填写了一些整数. 我们沿着图中的红色线剪开,得到两个部分,每个部分的数字和都是60. 本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以 ...

随机推荐

  1. HDU 1008 u Calculate e

    Problem Description A simple mathematical formula for e is where n is allowed to go to infinity. Thi ...

  2. 2、使用Struts2实现登录功能(没有连接数据)

    1.创建如下的目录结构 2.在com.entity包下创建 package com.entity; /** * 用户类 * @author Holly老师 * */ public class User ...

  3. NSCondition

    一.NSCondition是对条件变量和互斥量的一个封装,用于线程之间的同步. 其中的互斥量用于保护对条件变量的修改,条件变量变化以信号量的方式通知其它线程实现线程之间的同步. 二.NSConditi ...

  4. Python之深浅拷贝&函数

    一.深浅拷贝 深浅拷贝是指copy模块下的copy()和deepcopy()方法. 1.浅拷贝 示例: >>> import copy >>> a = 'hello ...

  5. java实现UDP聊天---转载

    import java.io.*; import java.net.*; class Send implements Runnable { private DatagramSocket ds; pub ...

  6. ios 将图片变成圆形

    #pragma mark - 将图片转换成圆形 -(UIImage*) circleImage:(UIImage*) image withParam:(CGFloat) inset { UIGraph ...

  7. Brackets + Sass 学习心得

    大家知道Brackets是一个可以实时浏览html页面修改效果的工具,对于前段开发人员应该不会陌生,有了它,布局页面再也不是什么困难了, 目前为止已经更新到1.6了. 下载最新版可以到官方网: htt ...

  8. ORACLE小工具:存储过程清空所有表或使所有触发器失效

    清空所有表: CREATE OR REPLACE PROCEDURE CLEAN_TABLES as v_tablename varchar2(256); cursor cur_tablename i ...

  9. C: strcpy & memcpy & scanf/printf format specifier.. escape characters..

    well, strcpy differs from memcpy in that it stops copy at \0 the format specifier is a string.. whic ...

  10. php给数组key:value中的key加引号

    public function Ext_json_decode($str, $mode=false){ if(preg_match('/\w:/', $str)){ $str = preg_repla ...