Cod sursa(job #115339)

Utilizator Adela_BaciuAdela Baciu Adela_Baciu Data 16 decembrie 2007 12:13:53
Problema Dusman Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.35 kb
#define DMAX 50
#include<stdio.h>
long nr,ok,aux,num,x,y,i,j,b[DMAX][DMAX];
long n,k,m;
long a[DMAX][DMAX];
int main()
{
 freopen("dusman.in","r",stdin);
 freopen("dusman.out","w",stdout);
 scanf("%ld %ld %ld",&n,&k,&m);
 for(i=1;i<=m;i++)
  {
   scanf("%ld %ld",&x,&y);
   b[x][y]=b[y][x]=1;
   b[x][0]++; b[y][0]++;
  }
 nr=1;
 for(i=2;i<=n;i++)
  nr=nr*i;
 for(i=1;i<=n;i++)
  a[1][i]=i;
 for(i=2;i<=nr-1;i++)
  {
   for(j=1;j<=n;j++)
    {
     a[i][j]=a[i-1][j]+1;
     if(a[i][j]==n+1)
      a[i][j]=1;
    }
  if((i+1)%n==0)
  {
   ++i;
   for(j=2;j<=n;j++)
    a[i][j-1]=a[i-1][j];
   a[i][n]=a[i-1][1];
  }
  }
 do
 {
  ok=0;
  for(i=1;i<nr;i++)
  {
   if(a[i][1]>a[i+1][1])
    {
     for(j=1;j<=n;j++)
      {
       aux=a[i][j];
       a[i][j]=a[i+1][j];
       a[i+1][j]=aux;
       ok=1;
      }
    }
   else
    if(a[i][1]==a[i+1][1])
     {
      j=1;
      while(a[i][j]==a[i+1][j])
       j++;
      if(a[i][j+1]>a[i+1][j+1])
       {
	for(j=1;j<=n;j++)
	 {
	  aux=a[i][j];
	  a[i][j]=a[i+1][j];
	  a[i+1][j]=aux;
	  ok=1;
	 }
       }
     }
   }
  }while(ok==1);

 num=0;
 for(i=1;i<=nr;i++)
 {
  ok=1;
  for(j=1;j<n;j++)
   if(b[a[i][j]][a[i][j+1]]==1)
    ok=0;
  if(ok==1)
   num++;
  if(num==k)
   {
    for(j=1;j<=n;j++)
     printf("%ld ",a[i][j]);
   }
 }
 return 0;
}