Pagini recente » Cod sursa (job #73111) | Cod sursa (job #2504808) | Cod sursa (job #690879) | Cod sursa (job #283551)
Cod sursa(job #283551)
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
#define INPUT "dusman.in"
#define OUTPUT "dusman.out"
#define pb push_back
#define VI vector<int>
const int NMAX = 1001;
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
int N, M, K, k;
int st[ NMAX ];
VI A[ NMAX ];
void readData()
{
int X, Y;
fscanf(fin, "%d %d %d", &N, &K, &M);
for(int i = 0; i < M; ++i)
{
fscanf(fin, "%d %d", &X, &Y);
A[ X ].pb(Y);
A[ Y ].pb(X);
}
}
int succesor()
{
++st[ k ];
if(st[ k ] <= N) return 1;
return 0;
}
int valid()
{
VI::iterator it;
for(it = A[ st[ k ] ].begin(); it != A[ st[ k ]].end(); ++it)
if(st[ k - 1 ] == *it) return 0;
for(int i = 1; i <= k-1; ++i)
if(st[ i ] == st[ k ]) return 0;
return 1;
}
int solutie()
{
if(k == N) return 1;
return 0;
}
int main()
{
int as, ev, cont = 0;
readData();
k = 1;
st[ k ] = 0;
while( k )
{
do{
as = succesor();
if(as) ev = valid();
if((as && ev) || (!as) ) break;
} while(1);
if(as)
{
if(solutie())
{
++cont;
if(cont == K)
for(int i = 1; i <= N; ++i) fprintf(fout, "%d ", st[ i ]);
}
else
{
++k;
st[ k ] = 0;
}
}
else
--k;
}
fclose(fin);
fclose(fout);
return 0;
}