6 solutions
-
3
#include<iostream> #include<string> using namespace std; string a; bool in(char s,string y) { for(int i=0;i<y.size();i++) { if(y[i]==s) { return true; } } return false; } void f(int x,string s) { if(x==a.size())//返回条件 { cout<<s<<endl;//输出 return;//返回 } for(int i=0;i<a.size();i++)//每个字母 { if(!in(a[i],s))//是否有过 { f(x+1,s+a[i]);//递归 } } } int main() { cin>>a;//输入 f(0,"");//递归 return 0;//完结散花 }
-
1
懂了
//时间复杂度O(n^2) //空间复杂度O(1) #include<bits/stdc++.h> using namespace std; int n; string a, s;//a为输入,s为输出 bool pos[7];//记录a对应位置的字符是否已用 void Perm(int u) { //如果s填满,则输出 if (u == n) { cout << s << endl; } else { for (int i = 0; i < n; i++) { //如果a的位置i还没用 if (pos[i] == false) { s[u] = a[i];//用a[i]填s pos[i] = true;//标记a[i]已用 Perm(u + 1);//填s的下一个位置 pos[i] = false;//复原,相当于s[u]位置不填a[i],用于填别的数。 } } } } int main() { cin >> a; n = a.size();//用a初始化s,目的是给s初始化空间 s = a; Perm(0); return 0; }
-
1
#include<bits/stdc++.h> using namespace std; string a; int t; bool is(string n,char m){ for(int i=0;i<n.size();i++) if(n[i]==m) return false; return true; } //判断是否重复 void A(string w){ if(w.size()==t) cout<<w<<"\n"; //若满足,输出填好的字符串 else for(int i=0;i<t;i++) if(is(w,a[i])) A(w+a[i]); //若不满足,递归填字母 } int main(){ cin>>a; t=a.size(); A("");//从空串开始填 return 0; }
递归填字母即可
-
0
#include<bits/stdc++.h> using namespace std; int n; bool ppp[7]; string pppcin,pppcout; void ppppp(int x){ if(x==n)cout<<pppcout<<endl; else for(int i=0;i<n;i++)if(ppp[i]==false){ ppp[i]=true; pppcout[x]=pppcin[i]; ppppp(x+1); ppp[i]=false; } } int main(){ cin>>pppcout; pppcin=pppcout; n=pppcout.size(); ppppp(0); return 0; }
-
0
using namespace std; string s; int n; bool vis[100005]; char ans[100005]; void dfs(int dep){ if(dep == s.size()+1){ for(int i = 1;i < dep;i++){ cout << ans[i]; } cout << endl; } for(int i=0;i<s.size();i++){ if(!vis[i]){ vis[i] = 1; ans[dep] = s[i]; dfs(dep + 1); vis[i] = 0; } } } int main(){ cin >> s; dfs(1); return 0; }`
-
-7
#include <bits/stdc++.h> using namespace std; string s; int n; bool vis[100005]; char ans[100005]; void dfs(int dep){ if(dep==s.size()+1){ for(int i=1;i<dep;i++) cout<<ans[i]; cout<<endl; } for(int i=0;i<s.size();i++){ if(!vis[i]){ vis[i] = 1; ans[dep]=s[i]; dfs(dep+1); vis[i]=0; } } } int main(){ cin>>s; dfs(1); return 0; }
- 1
Information
- ID
- 685
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 4
- Tags
- # Submissions
- 123
- Accepted
- 53
- Uploaded By