Pagini recente »
Istoria paginii runda/lasm_18_01_2023_cl10/clasament
|
Clasament adunare
|
Clasament labsort9d
|
Istoria paginii runda/vaslui_cls9_16.11/clasament
|
Cod sursă (job #295602)
Cod sursă (job
#295602)
#include <fstream>
#define VMAX 23
#define ND 4
#define IMAX (VMAX*VMAX)-1
using namespace std;
ifstream cin("immortal.in");
ofstream cout("immortal.out");
struct pozitie
{
int x, y;
};
pozitie locatii[IMAX], sol[IMAX];
int table[VMAX][VMAX], n, m, nr, dl[]={-1, 0, 1, 0}, dc[]={0, 1, 0, -1};
bool mort[IMAX], stopRulare;
void citire();
void bordare();
void rulare(int k);
void afisare();
int main()
{
citire();
bordare();
rulare(1);
afisare();
return 0;
}
void citire()
{
int i;
cin >> n>> m>> nr;
for (i=1; i<=nr; i++)
{
cin >> locatii[i].x>> locatii[i].y;
table[locatii[i].x][locatii[i].y]=i;
}
}
void afisare()
{
int i;
for (i=1; i<=2*nr-2; i+=2)
{
cout << sol[i].x<< ' '<< sol[i].y<< ' '<< sol[i+1].x<< ' '<< sol[i+1].y<< '\n';
}
}
void bordare()
{
int i;
for (i=0; i<=m+1; i++)
{
table[0][i]=-1;
table[n+1][i]=-1;
}
for (i=1; i<=n; i++)
{
table[i][0]=-1;
table[i][m+1]=-1;
}
}
void rulare(int k)
{
int i, j, ant;
pozitie crt, test, test2;
if (stopRulare) return;
if (k==nr)
{
stopRulare=1;
}
else
{
for (i=1; i<=nr; i++)
{
if (!mort[i])
{
crt=locatii[i];
for (j=0; j<ND; j++)
{
test.x=crt.x+dl[j];
test.y=crt.y+dc[j];
if (table[test.x][test.y]>0)
{
test2.x=test.x+dl[j];
test2.y=test.y+dc[j];
if (table[test2.x][test2.y]==0)
{
sol[k*2]=test2;
sol[k*2-1]=crt;
ant=table[test.x][test.y];
mort[ant]=1;
table[test.x][test.y]=0;
table[crt.x][crt.y]=0;
table[test2.x][test2.y]=i;
locatii[i]=test2;
rulare(k+1);
if (stopRulare) return;
table[test.x][test.y]=ant;
table[test2.x][test2.y]=0;
table[crt.x][crt.y]=i;
mort[ant]=0;
locatii[i]=crt;
}
}
}
}
}
}
}