Pagini recente »
Istoria paginii runda/pro
|
Istoria paginii runda/10_3
|
Borderou de evaluare (job #248049)
|
Cod sursă (job #466238)
|
Cod sursă (job #295603)
Cod sursă (job
#295603)
#include <cstdio>
using namespace std;
struct pair1
{
int x,y;
}v[16],solutie[16];
int a[23][23],I;
bool rezolvare=1;
void bordare(int n,int m)
{
for (int i=0;i<=n+1;++i)
{
if (i==0 || i==n+1)
for (int j=0;j<=m+1;++j)
a[i][j]=-1;
else a[i][0]=-1, a[i][m+1]=-1;
}
}
void afiseaza_solutie()
{
for (int i=I;i>=2;--i)
{
printf("%d %d ",solutie[i].x/100,solutie[i].x%100);
printf("%d %d\n",solutie[i].y/100,solutie[i].y%100);
}
}
void bkt(int nemuritori)
{
if (nemuritori==1) rezolvare=0, afiseaza_solutie();
else
{
for (int i=1;i<=I && rezolvare;++i)
{
if (v[i].x!=-1)
{
if (a[v[i].x+1][v[i].y]==1 && a[v[i].x+2][v[i].y]==0)
{
int j=1,modif_j=0;
for (;v[j].x!=v[i].x+1 || v[j].y!=v[i].y;++j);
modif_j=v[j].x;
a[v[i].x][v[i].y]=0;
a[v[i].x+1][v[i].y]=0;
a[v[i].x+2][v[i].y]=1;
solutie[nemuritori].x=v[i].x*100+v[i].y;
solutie[nemuritori].y=(v[i].x+2)*100+v[i].y;
v[j].x=-1;
v[i].x+=2;
bkt(nemuritori-1);
v[j].x=modif_j;
v[i].x-=2;
a[v[i].x][v[i].y]=1;
a[v[i].x+1][v[i].y]=1;
a[v[i].x+2][v[i].y]=0;
}
if (a[v[i].x-1][v[i].y]==1 && a[v[i].x-2][v[i].y]==0)
{
int j=1,modif_j=0;
for (;v[j].x!=v[i].x-1 || v[j].y!=v[i].y;++j);
modif_j=v[j].x;
a[v[i].x][v[i].y]=0;
a[v[i].x-1][v[i].y]=0;
a[v[i].x-2][v[i].y]=1;
solutie[nemuritori].x=v[i].x*100+v[i].y;
solutie[nemuritori].y=(v[i].x-2)*100+v[i].y;
v[j].x=-1;
v[i].x-=2;
bkt(nemuritori-1);
v[j].x=modif_j;
v[i].x+=2;
a[v[i].x][v[i].y]=1;
a[v[i].x-1][v[i].y]=1;
a[v[i].x-2][v[i].y]=0;
}
if (a[v[i].x][v[i].y+1]==1 && a[v[i].x][v[i].y+2]==0)
{
int j=1,modif_j=0;
for (;v[j].x!=v[i].x || v[j].y!=v[i].y+1;++j);
modif_j=v[j].x;
a[v[i].x][v[i].y]=0;
a[v[i].x][v[i].y+1]=0;
a[v[i].x][v[i].y+2]=1;
solutie[nemuritori].x=v[i].x*100+v[i].y;
solutie[nemuritori].y=v[i].x*100+v[i].y+2;
v[j].x=-1;
v[i].y+=2;
bkt(nemuritori-1);
v[j].x=modif_j;
v[i].y-=2;
a[v[i].x][v[i].y]=1;
a[v[i].x][v[i].y+1]=1;
a[v[i].x][v[i].y+2]=0;
}
if (a[v[i].x][v[i].y-1]==1 && a[v[i].x][v[i].y-2]==0)
{
int j=1,modif_j=0;
for (;v[j].x!=v[i].x || v[j].y!=v[i].y-1;++j);
modif_j=v[j].x;
a[v[i].x][v[i].y]=0;
a[v[i].x][v[i].y-1]=0;
a[v[i].x][v[i].y-2]=1;
solutie[nemuritori].x=v[i].x*100+v[i].y;
solutie[nemuritori].y=v[i].x*100+v[i].y-2;
v[j].x=-1;
v[i].y-=2;
bkt(nemuritori-1);
v[j].x=modif_j;
v[i].y+=2;
a[v[i].x][v[i].y]=1;
a[v[i].x][v[i].y-1]=1;
a[v[i].x][v[i].y-2]=0;
}
}
}
}
}
int main()
{
freopen("immortal.in","r",stdin);
freopen("immortal.out","w",stdout);
int n,m;
scanf("%d %d %d\n",&n,&m,&I);
for (int i=1;i<=I;++i)
{
scanf("%d %d\n",&v[i].x,&v[i].y);
a[v[i].x][v[i].y]=1;
}
bordare(n,m);
bkt(I);
}