Pagini recente »
Monitorul de evaluare
|
Monitorul de evaluare
|
vaslui_cls1112_24.01
|
Diferențe pentru runda/horatiu111 între reviziile 2 și 3
|
Cod sursă (job #293090)
Cod sursă (job
#293090)
#include <fstream>
#include <cstdlib>
using namespace std;
ifstream fin("immortal.in");
ofstream fout("immortal.out");
struct pozitie
{
int x;
int y;
}P[101];
struct solutie
{
int xi,yi,xf,yf;
}sol[101];
int n,m,nr,num,mort[101],x,y,a[101][101],i,j;
int dx[]={-1,0,1,0};
int dy[]={0,1,0,-1};
void bordare()
{
int i=0,j=0;
for (i=0;i<=n+3;i++)
a[i][0]=a[i][1]=a[i][m+2]=a[i][m+3]=-1;
for (j=0;j<=m+3;j++)
a[0][j]=a[1][j]=a[n+2][j]=a[n+3][j]=-1;
}
void afisare()
{
int i,j;
for (i=1;i<=nr-1;i++)
fout<<sol[i].xi-1<<' '<<sol[i].yi-1<<' '
<<sol[i].xf-1<<' '<<sol[i].yf-1
<<'\n';
exit(0);
}
void back(int k)
{
int i=0,d,omorat,x,y;
if (k==nr)
afisare();
else
for (i=1;i<=nr;i++)
if ( !mort[i] )
{
for ( d = 0 ; d < 4 ; d++ )
{
x = P[i].x;
y = P[i].y;
if (a[x+dx[d]][y+dy[d]]>0&&a[x+2*dx[d]][y+2*dy[d]]==0)
{
omorat=a[x+dx[d]][y+dy[d]];
mort[omorat]=1;
P[i].x=x+2*dx[d];
P[i].y=y+2*dy[d];
sol[k].xi=x;
sol[k].yi=y;
sol[k].xf=x+2*dx[d];
sol[k].yf=y+2*dy[d];
a[x+dx[d]][y+dy[d]]=0;
a[x+2*dx[d]][y+2*dy[d]]=a[x][y];
a[x][y]=0;
back(k+1);
a[x][y]=a[x+2*dx[d]][y+2*dy[d]];
a[x+2*dx[d]][y+2*dy[d]]=0;
a[x+dx[d]][y+dy[d]]=omorat;
P[i].x=x;
P[i].y=y;
mort[omorat]=0;
}
}
}
}
int main()
{
fin>>n>>m>>nr;
for ( i = 1 ; i <= nr ; i++ )
{
fin >> x >> y;
a[x+1][y+1]=i;
P[i].x=x+1;
P[i].y=y+1;
}
bordare();
back(1);
//afisare1();
return 0;
}