码迷,mamicode.com
首页 > 其他好文 > 详细

计算之道 (置换的玩笑)搜索

时间:2015-07-14 15:37:25      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:搜索

小蒜头又调皮了。这一次,姐姐的实验报告惨遭毒手。

姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔。但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 1 到 100 的且首部没有空格的数字串。

现在姐姐已经怒了,蒜头找你写个程序快点把试验数据复原。

输入

输入文件有一行,为一个字符串——被蒜头搞乱的实验数据。

字符串的长度在 1 到 100 之间。

输出

输出共一行,为姐姐的原始测试数据—— 1 到 n 的输出。

任意两个数据之间有一个空格。

样例1

输入:

4111109876532

输出:

4 1 11 10 9 8 7 6 5 3 2
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;

int flag[105],ok,vist[105],len;
vector<int>loc[60];
char s[105];

void dfs(int num){
    if(num==0){
        ok=1;
        int i=0;
        do{
            printf("%c",s[i]); i++;
        }while(flag[i]==0);
        while(i<len){
            printf(" ");
            do{
                printf("%c",s[i]); i++;
            }while(flag[i]==0);
        }
        printf("\n");
        return ;
    }
    for(int i=loc[num].size()-1; i>=0; i--){
        int j=loc[num][i];
        if(num<=9){
            if(vist[j]==0)
            {
                vist[j]=1;
                flag[j]=1;
                dfs(num-1);
                if(ok)return ;
                vist[j]=0;
                flag[j]=0;
            }
        }
        else if(vist[j]==0&&vist[j+1]==0)
        {
            vist[j]=vist[j+1]=1;
            flag[j]=1;
            dfs(num-1);
            if(ok)return ;
            vist[j]=vist[j+1]=0;
            flag[j]=0;
        }
    }
}

int main(){

    while(scanf("%s",s)>0){
        len=strlen(s);
        int maxnum;
        ok=0;
        memset(vist,0,sizeof(vist));
        memset(flag,0,sizeof(flag));
        flag[len]=1;
        if(len<=9)
            maxnum=len;
        else
            maxnum=(len-9)/2+9;
        for(int i=1; i<=maxnum; i++){
            loc[i].clear();
            for(int j=0; j<len; j++)
            if(i<=9){
                if(s[j]-'0'==i)
                    loc[i].push_back(j);
            }
            else if(i==(s[j]-'0')*10+s[j+1]-'0'&&j+1<len)
                loc[i].push_back(j);
        }
         dfs(maxnum);
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

计算之道 (置换的玩笑)搜索

标签:搜索

原文地址:http://blog.csdn.net/u010372095/article/details/46877889

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!