Pagini recente » Cod sursa (job #3190112) | Cod sursa (job #2027145) | Monitorul de evaluare | Cod sursa (job #2238188) | Cod sursa (job #3282948)
#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);
}