Cod sursa(job #944362)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 28 aprilie 2013 11:29:24
Problema Dusman Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>

using namespace std;

struct om
{    
   int dusmani[4];       
}v[1002];

ifstream cin("dusman.in");
ofstream cout("dusman.out");

bool sunt_dusmani(int a,int b)
{
    int i;
    bool gasit=false;
    
    for(i=1;i<=v[a].dusmani[0];i++)
       if(v[a].dusmani[i]==b)
       {
          gasit=true;
          break;                          
       }                            
    
    if(gasit)
      return true;
    return false;
}

int sol[1001];
int gasite;
int n,k;
bool frec[1001];
bool stop;

void back(int poz)
{
     int i;
   if(stop)
     return;  
   if(poz==(n+1))
   {
        gasite++;
        if(gasite==k)
        {
           stop=true;
    for(i=1;i<=n;i++)
    {
       cout<<sol[i]<<' ';                 
    }
    cout<<'\n';
           return;
        }         
   }     
   else
   {
       for(i=1;i<=n && !stop;i++)
         if(!frec[i] && !sunt_dusmani(i,sol[poz-1]))
         {
            sol[poz]=i;
            frec[i]=1;
            back(poz+1);
            frec[i]=0;
            sol[poz]=0;
         }
   }
}

int main()
{
    int m,i,a,b;
    cin>>n>>k>>m;
    
    for(i=1;i<=n;i++)
    {
       v[i].dusmani[0]=0;                
    }
    
    for(i=0;i<m;i++)
    {
        cin>>a>>b;
        v[a].dusmani[++v[a].dusmani[0]]=b;
        v[b].dusmani[++v[b].dusmani[0]]=a;            
    }
    
    back(1);
    
    //system("PAUSE");
    cin.close();
    cout.close();
    return 0;
}