c++中dfs取一个字符串的子序列
时间: 2023-08-20 07:51:48 浏览: 180
在C++中,可以使用递归实现DFS来找到一个字符串的所有子序列。以下是一个示例代码:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void dfs(string s, string current, int index, vector<string>& results) {
// 当前子序列加入结果集
if (!current.empty()) {
results.push_back(current);
}
// 从当前索引开始,依次选择下一个字符
for (int i = index; i < s.length(); i++) {
// 加入当前字符并继续递归
dfs(s, current + s[i], i + 1, results);
}
}
vector<string> findSubsequences(string s) {
vector<string> results;
dfs(s, "", 0, results);
return results;
}
int main() {
string str = "abc";
vector<string> subsequences = findSubsequences(str);
for (const string& subseq : subsequences) {
cout << subseq << " ";
}
cout << endl;
return 0;
}
```
运行上述代码,将输出字符串`"abc"`的所有子序列:`"" "a" "ab" "abc" "ac" "b" "bc" "c"`。
该代码使用了递归的方式实现DFS,通过不断向下搜索并记录产生的子序列。在每一步中,可以选择将当前字符添加到子序列中或者将其跳过。最终,所有可能的子序列都会被找到并添加到结果集中。
阅读全文