九度OJ1120 全排列

題目描述

給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。
我們假設對於小寫字母有’a’ < ‘b’ < … < ‘y’ < ‘z’,而且給定的字符串中的字母已經按照從小到大的順序排列。
輸入:
輸入只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在1到6之間。
輸出:
輸出這個字符串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:
已知S = s1s2…sk , T = t1t2…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<stdio.h>
#include<string.h>
using namespace std;
int n;
char ans[8];
char prt[8];
bool hash[8];

void DFS(int num){
if(num==n-1){
    for(int i=0;i<n;i++)
    printf("%c",ans[i]);
    printf("\n");return;}

for(int i=0;i<n;i++){//邊界條件!
     if(hash[i]==false){
         hash[i]=true;
         ans[num+1]=prt[i];
         DFS(num+1);
         hash[i]=false;
     }
}
}
int main(void){
while(scanf("%s",prt)!=EOF){
    n=strlen(prt);
    for(int i=0;i<8;i++){
        hash[i]=false;
    }
    DFS(-1);
}

}

注意

字符串操作
C語言裏用字符數組實現,如下所示:

char str[7]= "abcde";
//不能夠str ="abcde";
printf("%d\n",(int)strlen(str));
str[3]='\0';
printf("%d\n",(int)strlen(str));
str[0]='\0';
if(str[0]==0)printf("%s字符串爲空\n",str);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章