浙江大学ZOJ 1004题 详解

博客详细解析了浙江大学ZOJ 1004题,该题涉及使用栈来变换字符串。题目要求通过压栈和出栈操作将第一行字符串转换成第二行字符串,并给出所有可能的转换序列。解决方案是利用深度优先搜索策略,优先考虑压栈操作,以确保压栈次数尽量多。文章提供了代码实现,并指出有效转换的条件是操作次数等于原字符串长度的两倍。

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

  • 第一件事还是翻译题目,这道题目的意思大概是,有多组输入,每组输入有两行,第一行是一个单词(字符串)第二行是另外一个字符串(有可能组成字母都是相同的只不过是字母顺序不同,也有可能是另外的字符串,和原来的字符串没有多大关系),然后給你一个栈,你对这个栈和第一个字符串一共有两种操作,

  • 第一种,压栈操作,执行这种操作会让第一个字符串的第一位放入栈中(就是说如果原来的字符串是madam,执行完一次压栈操作之后,原字符串就变成了adam,然后栈中就会有一个字母m。执行一次压栈操作需要输出一次i。

  • 第二种,出栈操作,执行这种操作会让栈将栈顶元素弹出栈,放入一个字符串中,就是说如果栈中有,m,a两个元素,执行一次弹栈操作,接收的字符串会变成“m”,再弹一次会变成“ma”。执行一次出栈操作需要输出一次o。

  • 题目问的是,第一个字符串需要经过上述两种操作变成第二个字符串(要把每一种方式都写出来),整个题目的输出格式大概为每组数据
    [
    i i i i o o o i o o
    i i i i o o o o i o
    i i o i o i o i o o
    i i o i o i o o i o
    ]
    四种不同方式的排序,为压栈操作平均越靠前,这组数据的排名越靠前(就是说处理的时候尽量先压栈就好了)。数据的每一行后面都是有空格的。如果第一个字符串不能成功变成第二个字符串就直接输出
    [
    ]
    就好了。

  • 这道题也是一道用深度优先搜索就能成功A掉的题目,就是列出每一种分支选取正确分支输出就好了,有限查找压栈操作靠前的分支。而且第一行字符串如果能够成功变为第二行字符串的话,压栈出栈的操作数加起来应该是正好等于字符串长度的二倍,所以这就是递归搜索的退出条件。然后,

上代码

#include<iostrea
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值