国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

遞歸法解全排列

2019-11-11 02:44:49
字體:
供稿:網(wǎng)友

總時間限制: 1000ms 內(nèi)存限制: 65536kB

描述

給定一個由不同的小寫字母組成的字符串,輸出這個字符串的所有全排列。 我們假設(shè)對于小寫字母有'a' < 'b' < ... < 'y' < 'z',而且給定的字符串中的字母已經(jīng)按照從小到大的順序排列。

輸入 輸入只有一行,是一個由不同的小寫字母組成的字符串,已知字符串的長度在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

樣例輸出

abcacbbacbcacabcba

使用遞歸來解決全排列問題

主要思路是:

1. 輸入一串字符串(已按序排列)和需要在輸出數(shù)組中占有的位置 2. 判斷該位置是否到達(dá)邊緣 3. 若是,則進(jìn)行輸出 4. 若不是,則將其中每一個字符依次當(dāng)作第一個字母并將剩下的字母送去排列,同時位置加一

#include <iostream>#include <cstring>using namespace std;char tmp[100];//用于輸入int tmpSize;char out[100];//用于輸出void PRint(); //輸出所有的可能void pailie(char *a, int i); // 從第i個開始把a之后的填充進(jìn)去int main(){ cin >> tmp; tmpSize = strlen(tmp); pailie(tmp,0); return 0;}void print(){ for(int j=0;j<tmpSize;j++){ cout << out[j]; } cout << endl;}void pailie(char *a, int i){ if(i==tmpSize){ print(); return; } for(int j=0;j<strlen(a);j++){//把除了當(dāng)?shù)谝粋€的字符以外的其他字符拿出來送去遞歸 out[i]=a[j]; char tt[100]={'/0'};//必須要初始化為了以后的strlen函數(shù) for(int m=0;m<j;m++){ tt[m]=a[m]; } for(int n=j+1;n<strlen(a);n++){ tt[n-1]=a[n]; } pailie(tt,i+1); }}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖宇县| 如皋市| 丰顺县| 兴宁市| 广丰县| 藁城市| 珠海市| 海原县| 武隆县| 绥德县| 延川县| 聊城市| 泽州县| 五大连池市| 榆社县| 巴林右旗| 齐齐哈尔市| 洱源县| 漳州市| 湘西| 南澳县| 克拉玛依市| 鹤庆县| 沧源| 隆德县| 虹口区| 扶沟县| 靖边县| 赫章县| 岳池县| 台中市| 黑水县| 陇南市| 延长县| 张家界市| 长阳| 信宜市| 凤山市| 民和| 隆子县| 上思县|