Cod sursa(job #218907)

Utilizator alex23alexandru andronache alex23 Data 3 noiembrie 2008 21:57:18
Problema Dusman Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#define NMAX 1050

FILE *f = fopen("dusman.in", "r"), *g = fopen("dusman.out", "w");

int a[NMAX][NMAX], st[NMAX]; 
int n, p, m;

int main()
  {
   fscanf(f, "%d %d %d", &n, &p, &m);
   for (int i = 1; i <= m; i++)
     {int x, y;
      fscanf(f, "%d %d", &x, &y);
      /*
      a[x][++a[x][0]] = y;
      a[y][++a[y][0]] = x;
      */
      a[x][y] = a[y][x] = 1;
     }       
   fclose(f);
   
   int k = 1;
   st[1] = 0;
   int numar = 0;
   while (k > 0)
    {int as, ev;
     do
      {as = 0;
       if (st[k] < n) {st[k]++;
                       as = 1;
                       }
       if (as) {ev = 1;
                for (int i = 1; i < k; i++)
                   if (st[k] == st[i]) ev = 0;
                /*
                if (k > 1)
                    for (int i = 1; i <= a[st[k]][0]; i++)
                        if (a[st[k]][i] == st[k - 1]) ev = 0;
                */
                if ((k > 1) && (a[st[k]][st[k - 1]])) ev = 0;
                }
       }
     while (!((!as) || (as && ev)));
     if (as)
         if (k == n) {numar++;
                      if (numar == p) break;
                      } 
            else
                 {k++;
                  st[k] = 0;
                 }
     else k--;
     }

   for (int i = 1; i <= n; i++)
       fprintf(g, "%d ", st[i]);
   fclose(g);    

   return 0;
   }