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

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Uva129 Krypton Factor【dfs回溯】【例題7-5】

2019-11-11 06:40:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

題目:Krypton Factor

題意:如果一個(gè)字符串包含兩個(gè)相鄰的重復(fù)子串,則稱它是“容易的串”,其他串稱為“困難的串”。輸入n,L,輸出由前L個(gè)字符組成的、 字典序第n小的困難的串。

思路:

(1)dfs遞歸枚舉前l(fā)個(gè)字符;

(2)判斷相鄰的重復(fù)子串:無(wú)需判斷整個(gè)串的重復(fù),只需判斷當(dāng)前串的后綴,枚舉串的長(zhǎng)度(只需枚舉到串長(zhǎng)的一半),按串長(zhǎng)度平分串,然后比較倆串的后綴是否相等。

(3)遞歸時(shí),找到結(jié)果后需要返回值,用于dfs的return結(jié)束。

參考:入門(mén)經(jīng)典-例題7-5-P195

代碼:

#include <iostream>#include <stdio.h>using namespace std;int n,l,cot,PRt[100];int dfs(int len){    if(cot++ == n){//達(dá)到個(gè)數(shù)        int temp = 0;        for(int i=0;i<len;i++){            printf("%c",prt[i]+'A');            if((i+1)%4 == 0){//4個(gè)為一組                if(i+1 >= len) continue;//最后一組不做處理                if((temp+1)%16) printf(" ");                else printf("/n");                temp++;            }        }        if((temp+1)%16 || len%4) printf("/n");//處理最后一個(gè)換行        printf("%d/n",len);        return 0;    }    for(int i=0;i<l;i++){//枚舉l個(gè)字符        prt[len] = i;        int ok = 1;        for(int j=1;j*2<=len+1;j++){//j*2的后綴            int equ = 1;            for(int k=0;k<j;k++){                if(prt[len-k] != prt[len-k-j]){//檢查后一半是否等于前一半                    equ = 0;break;                }            }            if(equ){ok = 0;break;}//不相等標(biāo)記        }        if(ok) if(!dfs(len+1)) return 0;//找到解,返回0,if成立,return結(jié)束(如果不加這步的話無(wú)法退出遞歸了)    }return 1;}int main(){    while(scanf("%d%d",&n,&l)!=EOF && (n || l)){        cot = 0;        dfs(0);    }    return 0;}


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 苏尼特右旗| 高碑店市| 辉县市| 松滋市| 宜黄县| 体育| 聊城市| 张家口市| 常山县| 和静县| 温宿县| 新安县| 唐海县| 霍林郭勒市| 达州市| 枣阳市| 高雄县| 闵行区| 安吉县| 当阳市| 丰都县| 佛冈县| 霍林郭勒市| 台湾省| 逊克县| 呼和浩特市| 孟连| 尼勒克县| 永嘉县| 南充市| 六盘水市| 乐清市| 海门市| 阜平县| 宣武区| 郴州市| 绩溪县| 平山县| 拉萨市| 兴安县| 富源县|