Cod sursa(job #3282948)

Utilizator andreidutaDuat Andrei andreiduta Data 7 martie 2025 17:05:20
Problema Dusman Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("dusman.in");
ofstream fout("dusman.out");
int n,m,k,x[101],nr,valid=1;
struct {
  int a,b;
}ext[101];
bool ok(int k){
  for(int i=1;i<k;i++)
      if(x[i]==x[k]) return false;
          return true;
}
bool f(){
  for(int i=1;i<=n;i++)
  {
      for(int j=1;j<=m;j++)
      {
          if(ext[j].a==x[i] || ext[j].b==x[i])
          {
                 if(ext[j].a==x[i])
                 {
                     if(x[i-1]==ext[j].b || x[i+1]==ext[j].b) return false;
                 }
                    else if(ext[j].b==x[i])
                    {
                       if(x[i+1]==ext[j].a|| x[i-1]==ext[j].a) return false;
                    }
          }
      }
  }
                return true;
}
void backtrack(int c){
    for(int i=1;i<=n && valid==1;i++)
    {
        x[c]=i;
        if(ok(c)==true)
        {
            if(c==n)
            {
                 if(f()==true){
                  nr++;
                   if(nr==k){
                      valid=0;
                  for(int j=1;j<=n;j++)
                      fout<<x[j]<<" ";
                            }
                              }
            }
              else backtrack(c+1);
        }
    }
 }
int main()
{
   fin>>n>>k>>m;
   for(int i=1;i<=m;i++)
      fin>>ext[i].a>>ext[i].b;
   backtrack(1);
}