Zoj1004

本文详细介绍了使用C++语言进行字符串操作,并通过递归实现深度优先搜索算法的过程与技巧,包括栈的应用、字符的推入与弹出、字符串构建与打印等关键步骤。
#include<string>
#include<iostream>
#include<stack>
using namespace std;
string s1;
string s2;
string s;
string action;
stack<char> stak;
int pos1, cur;
void push()
{
	stak.push(s1[pos1]);
	pos1++;
	action += "i";
}
void pop()
{
	char ch = stak.top();
	stak.pop();
	action += "o";
	s += ch;
	cur++;
}
void print()
{
	for (int i = 0; i < action.size(); i++)
		cout << action[i] << " ";
	cout << endl;
}

void dfs()
{
	if (cur>0 && s[cur - 1] != s2[cur - 1])
		return;
	if (cur == s1.size())
	{
		print();
		return;
	}
	string temp_s1 = s1, temp_s2 = s2, temp_s = s, temp_action = action;
	stack<char> temp_stak = stak;
	int temp_pos1 = pos1, temp_cur = cur;
	if (pos1 < s1.size())
	{
		push();
		dfs();
	}
	s1 = temp_s1;
	s2 = temp_s2;
	s = temp_s;
	action = temp_action;
	stak = temp_stak;
	pos1 = temp_pos1;
	cur = temp_cur;
	if (!stak.empty())
	{
		pop();
		dfs();
	}
}
int main()
{
	while (cin >> s1 >> s2)
	{
		s = action = "";
		stak = stack<char>();
		pos1 = 0;
		cur = 0;
		cout << "[" << endl;
		dfs();
		cout << "]" << endl;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值