深搜:每次从剩下的没有被选择过的元素中选择一个元素放在当前位置,然后继续按同样的方法确定下一个位置的元素,知道所有的元素都被选择过则完成一次排列
void Permutation(string& str, string& path, int depth,set<string>& result,vector<bool>& visit){
//参数说明:
//str是要求解全排列的字符串
//path是搜索得到的当前排列
//depth是搜索的深度
//result是记录所有的路径
//visit是记录当前元素是否被访问过
if (depth >= str.size()){
result.insert(path);//保障搜索得到的全排列不重复
}
for (int i = 0; i < str.size(); ++i){
if (visit[i] == 0){
visit[i] = 1;
path[depth] = str[i];
Permutation(str, path, depth+1, result, visit);
visit[i] = 0;
}
}
}
int main(){
string str="abc";
string temp=str;
vector<string> result;
vector<bool> visit(str.size(),0);
Permutation(str, temp, 0, result,visit);
return 0;
}