您的位置:首页 > 健康 > 美食 > 特效素材网站_家庭办厂3一8万项目_网页快速收录_重庆seo技术

特效素材网站_家庭办厂3一8万项目_网页快速收录_重庆seo技术

2024/12/27 14:34:29 来源:https://blog.csdn.net/ygklwyf/article/details/144121872  浏览:    关键词:特效素材网站_家庭办厂3一8万项目_网页快速收录_重庆seo技术
特效素材网站_家庭办厂3一8万项目_网页快速收录_重庆seo技术
#include<bits/stdc++.h>
using namespace std;
int main()
{string s;cin >> s;sort(s.begin(), s.end());do {cout << s << endl;} while (next_permutation(s.begin(), s.end()));cout << endl;sort(s.begin(), s.end(),greater<char>());do {cout << s << endl;} while (prev_permutation(s.begin(), s.end()));return 0;
}

简单明了,全靠 next/prev_permutation 函数,这是一个非常好用的排序函数,但无法进行剪枝的操作,即在明知当前排列已经错误时无法停止,会导致超时。

这是就需要我们手写一个排列函数

#include<bits/stdc++.h>
using namespace std;vector<int> a={1,2,3,4,5,6,7,8,9,10};
bool vis[20];
int b[20];void dfs(int s,int t,vector<int>&a2){if(s == t){for(int i = 0; i < t; ++i) cout << b[i] << " ";cout << endl;return;}
//剪枝操作for(int i = 0; i < t; i++){if(!vis[i]){vis[i] = true;b[s] = a2[i];dfs(s + 1,t,a2);vis[i] = false;}}return;
}
int main(){int start,end;cin>>start>>end;vector<int> a2(a.begin() + start - 1, a.begin() + end);dfs(0,end-start+1,a2);return 0;
}

这里没有具体的例子大致是满足一个具体的条件后return结束递归

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com