Cod sursa(job #124281)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 18 ianuarie 2008 19:15:59
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>

long n,k,m,i,j,c,a,b,d[1002][4],perm[1002];
bool ok;

void PrintPerm() {
     ok=1;
     for (i=1;i<n;i++){
         for (j=1;j<=d[perm[i]][0];j++)
             if (perm[i+1]==d[perm[i]][j]){ok=0;break;}
         if (!ok)break;
     }
     c+=ok;
     if(c==k){for (i=1;i<=n;i++)printf("%ld ",perm[i]);printf("\n");}
} 

void swap(int i, int j) {
	int temp;
	temp = perm[i];
	perm[i] = perm[j];
	perm[j] = temp;
}

void Next() {
	int k,j,r,s;

	k = n-1; 
	while (perm[k]>perm[k+1]) k--;
	
	j = n;
	while (perm[k] > perm[j]) j--;
	swap(j,k);
	r = n; s = k+1;
	while (r>s){
	      swap(r,s);
	      r--; s++;
	}
	
	PrintPerm();
}

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",&a,&b);
        d[a][0]++;
        d[a][d[a][0]]=b;
        d[b][0]++;
        d[b][d[b][0]]=a;
    }
    
    for (i=1;i<=n;i++)perm[i]=i;
    
    PrintPerm();
    c=0;
    while (c<k){
          Next();
    }
    //for (i=1;i<=n;i++)printf("%ld ",perm[i-1]);
    //printf("\n");
    
    return 0;
}