前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ZOJ Problem Set - 1004

ZOJ Problem Set - 1004

作者头像
Gabriel
发布2022-11-15 14:14:02
1700
发布2022-11-15 14:14:02
举报
文章被收录于专栏:C/C++

原理:DFS

代码语言:javascript
复制
#include<iostream>
#include<string>
#include<stack>
using namespace std;

string a,b;//用来存每组字符串的第一个和第二个
int sum;//用来存每组需要的操作数目(等于第一组字符串长度的二倍)
//深度优先搜索函数,六个参数分别为,
//第一个字符串(初始字符串),第二个字符串(目标字符串),中间栈,
//出栈组成字符串,用来存放出入栈的字符数组,执行到当前的出入栈操作综合

void dfs(string a,string b,stack<char>temp,string now,char flag[100],int num)
{
    //当出栈组成的字符串和目标字符串相同的时候,达到退出条件。
    if(now == b)
    {
        for(int i = 0;i < num;i++)
        {
            cout << flag[i] << " ";
        }
        cout << endl;
        return 0;
    }
    //减支,去掉不需要的数据
    if(num > sum)
    {
        return 0;
    }

    string test;
    string test_now = now;
    char flag_test[100];
    //判断能否压栈
    if(a != "")
    {
        //压栈
        temp.push(a[0]);

        flag[num] = 'i';

        test.assign(a,1,a.length() - 1);
    }

    for(int j = 0;j <= 99;j++)
    {
        flag_test[j] = flag[j];
    }
    //压栈分支
    if(a != "")
    {
        dfs(test,b,temp,test_now,flag_test,num + 1);
        if(!temp.empty())
        {
            temp.pop();
        }
    }
    //出栈分支
    if((!temp.empty())&&b[now.size()] == temp.top())
    {
        flag[num] = 'o';
        string now_test = now + temp.top();
        char testt = temp.top();

        if(!temp.empty())
        {
            temp.pop();
        }

        dfs(a,b,temp,now_test,flag,num + 1);
        temp.push(testt);
    }
}
int main()
{
    while(cin >> a >> b)
    {
        string sumstring[10000] = {""};
        sum = 2*a.size()-1;//记录此组数据最大出入栈操作数总和
        char flag[100];
        string c="";
        stack<char>temp;

        cout<<"["<<endl;//规范输出格式
        dfs(a,b,temp,c,flag,0);
        cout<<"]"<<endl;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档