Cod sursa(job #115412)

Utilizator SmarandaMaria Pandele Smaranda Data 16 decembrie 2007 12:34:10
Problema Dusman Scor 0
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasele 5-8 Marime 1.26 kb
#include<stdio.h>
#include<values.h>
int a[1001][1001],sol[1001];
int main()
{
int n,k,m,i,j,aa,b,num=0,ok,aux,l,min,h,poz,dr,st;

freopen("dusman.in","r",stdin);
freopen("dusman.out","w",stdout);

scanf("%d%d%d",&n,&k,&m);
for(i=1;i<=m;i++)
    {
      scanf("%d%d",&aa,&b);
      a[aa][b]=1;
      a[b][aa]=1;
    }
    ok=1;
for(i=1;i<n;i++)
   { sol[i]=i;
    if (a[i][i+1]==1)
	ok=0;       }
sol[n]=n;
if (ok)
   num++;
if (k==num)
    {for (i=1;i<=n;i++)
	printf("%d ",i);
	return 0;}
while(1)
   { i=n-1;
     do{
	 if(sol[i]<sol[i+1])
	     {
	       min=MAXINT;
	       for(h=i+1;h<=n;h++)
		   if(min>sol[h] && sol[h]>sol[i])
		      {
			min=sol[h];
			poz=h;
		      }
	       aux=sol[i];
	       sol[i]=min;
	       sol[poz]=aux;
	       dr=n;
	       st=i+1;
	       while(st<dr)
		  {
		    aux=sol[dr];
		    sol[dr]=sol[st];
		    sol[st]=aux;
		    st++;dr--;
		  }
	       ok=0;
	       i=n-1;
	       for(l=1;l<n && !ok;l++)
		   if(a[sol[l]][sol[l+1]]==1)
		     ok=1;
	       if(ok==0)
		  {
		    num++;
		    if(num==k)
		       {
			 for(l=1;l<=n;l++)
				 printf("%d ",sol[l]);
			fcloseall();
			return 0;
		       }
		 }
	     }
	 else
	    i--;
	  }while(i>=1);
	 }

}