Cod sursa(job #237140)

Utilizator c_e_manuEmanuel Cinca c_e_manu Data 29 decembrie 2008 01:24:08
Problema Dusman Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include<cstdio>

int a[1001][1001],st[1001],k,i,m,x,y,n,kappa,k_sol,as,ev,ok;

void init()
{       st[k]=0;}
int valid()
{       for(i=1;i<k;i++)
                if(st[i]==st[k]||a[st[i]][st[i+1]]) return 0;
        return 1;
}
int sol()
{       return k==n;}
int succ()
{       if(st[k]<n){st[k]++;return 1;}
        return 0;
}
void work()
{       k_sol++;
        if(k_sol==kappa)
        {       ok=1;
                for(i=1;i<=n;i++)
                        printf("%d ",st[i]);
        }
}
void back()
{       k=1;init();
        while(k>0&&!ok)
        {       as=1;ev=0;
                while(as&&!ev)
                {       as=succ();
                        if(as) ev=valid();
                }
                if(as)
                        if(sol()) work();
                        else {k++;init();}
                else    k--;
        }
}

int main()
{       freopen("dusman.in","r",stdin);
        freopen("dusman.out","w",stdout);
        scanf("%d%d%d",&n,&kappa,&m);
        for(i=1;i<=m;i++)
        {       scanf("%d%d",&x,&y);
                a[x][y]=a[y][x]=1;
        }
        back();
        return 0;
}