uva-140-全排序

记住一个全排序的函数:next_permutation(shu,shu+k);

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<cctype>
#include<algorithm>
using namespace std;
int map[30][30];
int put[10];
int xmin,k;
void fan(int *shu)
{
    int T=0;
    int i,j,nmax,leap;
    for(i=0;i<k;i++)
    {
        nmax=0;
        for(j=0;j<k;j++)
        {
            if(i!=j)
            {
                if(map[shu[i]][shu[j]]==1)
                {
                    leap=fabs(i-j);
                    if(leap>nmax)nmax=leap;
                }
            }
        }
        if(nmax>T)
        T=nmax;
    }
    if(T<xmin)
    {
        xmin=T;
        for(i=0;i<k;i++)
        {
            put[i]=shu[i];
        }
    }
}
int main()
{
    int have[30];
    int n,i,leap;
    int shu[10];
    char str[10000];
    while(gets(str)&&(str[0]!='#'))
    {
        k=0;
        n=strlen(str);
        memset(have,0,sizeof(have));
        memset(map,0,sizeof(map));
        memset(shu,0,sizeof(shu));
        leap=str[0]-'A';
        shu[k++]=str[0]-'A';
        have[shu[0]]=1;
        for(i=1;i<n;i++)
        {
            if(str[i]==':')
            continue;
            if(str[i]==';')
            {
                i++;
                leap=str[i]-'A';
                if(have[str[i]-'A']==0)
                {
                    shu[k]=str[i]-'A';
                    have[shu[k]]=1;
                    k++;
                }
                continue;
            }
            if(have[str[i]-'A']==0)
            {
                shu[k]=str[i]-'A';
                have[shu[k]]=1;
                k++;
            }
            map[leap][str[i]-'A']=1;
        }
        xmin=100000000;
        sort(shu,shu+k);
        fan(shu);
        while(next_permutation(shu,shu+k))
        {
            fan(shu);
        }
        for(i=0;i<k;i++)
        {
            printf("%c ",put[i]+'A');
        }
        printf("-> %d\n",xmin);
    }
    return 0;
}

你可能感兴趣的:(c,ini,permutation)