全排列(信息学奥赛一本通-T1199)
生活随笔
收集整理的這篇文章主要介紹了
全排列(信息学奥赛一本通-T1199)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。
我們假設對于小寫字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且給定的字符串中的字母已經按照從小到大的順序排列。
【輸入】
只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在1到6之間。
【輸出】
輸出這個字符串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知S=s1,s2...sk,T=t1,t2...tk,則S<T等價于,存在p(1≤p≤k),使得s1=t1,s2=t2,...,sp?1=tp?1,sp<tp成立。
【輸入樣例】
abc
【輸出樣例】
abc
acb
bac
bca
cab
cba
【源程序】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> using namespace std; char str[10],temp[10]; int n; bool vis[10]; void dfs(int step) {if(step==n){temp[step]='\0';cout<<temp<<endl;}for(int i=0;i<n;i++)if(vis[i]==0){vis[i]=1;temp[step]=str[i];dfs(step+1);vis[i]=0;} } int main() {memset(vis,0,sizeof(vis));scanf("%s",str);n=strlen(str);dfs(0);return 0; }?
總結
以上是生活随笔為你收集整理的全排列(信息学奥赛一本通-T1199)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018 年“浪潮杯”山东省 ACM 省
- 下一篇: 训练日志 2019.1.12