Pagini recente »
Istoria paginii runda/clasa-11/clasament
|
Cod sursă (job #293095)
Cod sursă (job
#293095)
#include <fstream>
#define NMAX 25
using namespace std;
ifstream f("immortal.in");
ofstream g("immortal.out");
int n, m, imm, mat[23][23];
struct punct
{
int x, y;
} a, b;
struct lupta
{
punct a, b;
};
punct v[NMAX*NMAX];
lupta lupte[NMAX*NMAX];
int uz[NMAX*NMAX];
int dl[]={-1, 0, 1, 0};
int dc[]={0, 1, 0, -1};
int ok;
void citire();
void bkt(int k);
void afisare();
int main()
{
citire();
bkt(1);
afisare();
return 0;
}
void citire()
{
int i;
f>>n>>m>>imm;
for (i=1;i<=imm;i++)
{
f>>v[i].x>>v[i].y;
mat[v[i].x][v[i].y]=i;
}
}
void bkt(int k)
{
int i, dir, l9, c9, muritor;
punct luptator;
if (ok==1) return;
if (k==imm)
{
afisare();
ok=1;
return;
}
for (i=1; i<=imm; i++)
{
if (uz[i]==0)
{
for (dir=0;dir<4;dir++)
{
l9=v[i].x+dl[dir];
c9=v[i].y+dc[dir];
if(l9+dl[dir]<=0 || c9+dc[dir]<=0 || l9+dl[dir]>=n+1 || c9+dc[dir]>=m+1)
continue;
if (mat[l9][c9]!=0 && mat[l9+dl[dir]][c9+dc[dir]]==0)
{
lupte[k].a.x=v[i].x;
lupte[k].a.y=v[i].y;
lupte[k].b.x=l9+dl[dir];
lupte[k].b.y=c9+dc[dir];
luptator=v[i];
muritor=mat[l9][c9];
mat[luptator.x][luptator.y]=0;
mat[l9][c9]=0;
mat[l9+dl[dir]][c9+dc[dir]]=i;
uz[muritor]=1;
v[i].x=l9+dl[dir];
v[i].y=c9+dc[dir];
bkt(k+1);
uz[muritor]=0;
mat[l9][c9]=muritor;
mat[l9+dl[dir]][c9+dc[dir]]=0;
mat[luptator.x][luptator.y]=i;
v[i]=luptator;
}
}
}
}
}
void afisare()
{
int i;
for(i=1;i<=imm-1;i++)
{
g<<lupte[i].a.x<<' ';
g<<lupte[i].a.y<<' ';
g<<lupte[i].b.x<<' ';
g<<lupte[i].b.y<<'\n';
}
g.close();
}