Pagini recente »
Atașamentele paginii OJI 2023 - Clasa a VI-a antrenament - FFA
|
Istoria paginii utilizator/candul
|
Istoria paginii utilizator/catacatalin2003
|
Atașamentele paginii Profil dianatudosa
|
Cod sursă (job #332046)
Cod sursă (job
#332046)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream in("immortal.in");
ofstream out("immortal.out");
struct ura
{
int x,y;
bool stare;
};
struct ura2
{
int xs,ys,xf,yf;
};
bool in_matrice(int x,int y);
void backtrack(int poz);
void print();
ura om[20];
ura2 sol[20];
int n,m,p,v[21][21],nrs,k,id,i,j;
int dx[]= {0,-1,0,1};
int dy[]= {-1,0,1,0};
int main()
{
in>>n>>m>>p;
for(i=1; i<=p; i++)
{
in>>om[i].x>>om[i].y;
v[om[i].x][om[i].y]=i;
}
///print();
backtrack(1);
return 0;
}
bool in_matrice(int x,int y)
{
return (x>=1 && x<=n && y>=1 && y<=m);
}
void backtrack(int poz)
{
if(poz==p)
{
for(i=1; i<p; i++)
out<<sol[i].xs<<" "<<sol[i].ys<<" "<<sol[i].xf<<" "<<sol[i].yf<<'\n';
exit(0);
}
for(int i=1; i<=p; i++)
{
if(om[i].stare==0)
{
for(int k=0; k<=3; k++)
if(v[om[i].x+dx[k]][om[i].y+dy[k]]>0 && in_matrice(om[i].x+2*dx[k],om[i].y+2*dy[k]))
{
nrs++;
sol[nrs].xs=om[i].x;
sol[nrs].ys=om[i].y;
id=v[om[i].x+dx[k]][om[i].y+dy[k]];
v[om[i].x][om[i].y]=0;
v[om[i].x+2*dx[k]][om[i].y+2*dy[k]]=i;
om[i].x+=2*dx[k];
om[i].y+=2*dy[k];
sol[nrs].xf=om[i].x;
sol[nrs].yf=om[i].y;
om[v[om[i].x-dx[k]][om[i].y-dy[k]]].stare=1;
v[om[i].x-dx[k]][om[i].y-dy[k]]=0;
///print();
backtrack(poz+1);
nrs--;
v[om[i].x-2*dx[k]][om[i].y-2*dy[k]]=i;
v[om[i].x][om[i].y]=0;
om[i].x-=2*dx[k];
om[i].y-=2*dy[k];
om[id].stare=0;
v[om[i].x+dx[k]][om[i].y+dy[k]]=id;
}
}
}
}
void print()
{
for(int x=1;x<=n;x++)
{
for(int y=1;y<=m;y++)
out<<v[x][y]<<' ';
out<<'\n';
}
out<<'\n';
}