【NOJ1143】【算法实验二】【DFS_回溯】字母转换

这是一篇关于使用深度优先搜索(DFS)和回溯策略解决字母转换问题的文章。作者通过给出的例子说明如何将一个字符串转换为另一个字符串,要求所有可能的进栈和出栈序列,并按字典序排列。文章记录了作者在解决这个问题时遇到的困难和代码版本的迭代过程,强调了代码备份的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1143.字母转换

时限:1000ms 内存限制:10000K  总时限:3000ms

描述

通过栈交换字母顺序。给定两个字符串,要求所有的进栈和出栈序列(i表示进栈,o表示出栈),使得字符串2在求得的进出栈序列的操作下,变成字符串1。输出结果需满足字典序。

例如TROT 到 TORT:

[
i i i i o o o o
i o i i o o i o
]

 

输入

给定两个字符串,第一个字符串是源字符串,第二个字符是目标目标字符串。

 

输出

所有的进栈和出栈序列,输出结果需满足字典序。


【2018/11/16第二版代码】

#include <iostream>
#include <stack>
#include <string>
using namespace std;

stack <char> s1;

string a,b;
int l;

int in,out; //进栈。出栈次数
int num;    //目前栈内元素个数

char ans[10001];    //存放答案

void dfs(int m);

int main()
{
    while(cin>>a>>b)    //多组测例
    {
        //cout<<a<<b;
        int la=a.length();
        int lb=b.length();

        cout<<'['<<endl;
        if(la==lb)  //若两字符串长度相同才深搜
        {
            in=out=num=0;
            l=la;
            dfs(0);
        }
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值