Pagini recente » Cod sursa (job #2858794) | Cod sursa (job #1454883) | Cod sursa (job #723741) | Cod sursa (job #1846750) | Cod sursa (job #2550976)
#include <bits/stdc++.h>
#define Nmax 20
using namespace std;
ifstream fin("ornament.in");
ofstream fout("ornament.out");
void Citire();
void Back(int,int);
inline bool Valid(int,int);
void Afisare();
struct patrat
{
int N,E,S,V;
};
patrat a[Nmax];
int n,m;
int task;
int x[Nmax][Nmax];
bool viz[Nmax];
bool ok;
int nrsol;
int main()
{
Citire();
Back(1,1);
if(task==2) fout<<nrsol;
fout.close();
return 0;
}
void Citire()
{
int i;
fin>>n;
m=sqrt(n);
for(i=1;i<=n;++i)
fin>>a[i].N>>a[i].E>>a[i].S>>a[i].V;
fin>>task;
fin.close();
}
void Back(int l,int c)
{
for(int i=1;i<=n && !ok;++i)
if(!viz[i])
{
x[l][c]=i;
viz[i]=1;
if(Valid(l,c))
if(l==m && c==m)
if(task==1) {Afisare();ok=1;}
else ++nrsol;
else
if(c<m) Back(l,c+1);
else Back(l+1,1);
viz[i]=0;
}
}
inline bool Valid(int l,int c)
{
if(l==1 && c==1) return 1;
if(l==1 && a[ x[l][c] ].V == a[ x[l][c-1] ].E ) return 1;
if(c==1 && a[ x[l][c] ].N == a[ x[l-1][c] ].S ) return 1;
if(a[ x[l][c] ].V == a[ x[l][c-1] ].E && a[ x[l][c] ].N == a[ x[l-1][c] ].S ) return 1;
return 0;
}
void Afisare()
{
for(int i=1;i<=m;++i)
{
for(int j=1;j<=m;++j)
fout<<x[i][j]<<' ';
fout<<'\n';
}
}