UVa 129 Krypton Factor困难的串 (dfs 递归搜索)

 

回溯法,只需要判断当前串的后缀,而不是所有的子串

#include<iostream>

#include<cstdio>

using namespace std;

int s[1000];

int n,l,cnt;

int bfs(int cur)

{

    if(cnt++==n)

    {

        for(int i=0; i<cur; i++)

            printf("%c",'A'+s[i]);

        cout<<endl;

        return 0;

    }

    for(int i=0; i<l; i++)

    {

        s[cur]=i;

        int ok=1;

        for(int j=1; j*2<=cur+1; j++)

        {

            int equal=1;

            for(int k=0; k<j; k++)

                if(s[cur-k]!=s[cur-k-j])

                {

                    equal=0;

                    break;

                }

            if(equal)

            {

                ok=0;

                break;

            }

        }

        if(ok)  if(!bfs(cur+1))

                return 0;

    }

    return 1;

}



int main()

{

    while(cin>>n>>l&&n&&l)

    {

        cnt=0;

        bfs(0);

    }

    return 0;

}

 

你可能感兴趣的:(DFS)