Pagini recente »
Istoria paginii utilizator/octav.bocancea
|
Istoria paginii runda/qwerty4
|
Istoria paginii utilizator/vasia_sirioja1
|
Borderou de evaluare (job #267257)
|
Cod sursă (job #295617)
Cod sursă (job
#295617)
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;
ifstream cin("immortal.in");
ofstream cout("immortal.out");
const int MAX = 25, GOL = 0, POM = -1;
int dx[]={0, 1, 0, -1};
int dy[]={1, 0, -1, 0};
struct immortal{
int x, y, mort;
}v[MAX];
struct cell{
int xs, ys, xf, yf;
}sol[MAX];
int a[MAX][MAX], lin, col, n;
void afis(){
for(int i=0; i<=lin+3; i++){
for(int j=0; j<=col+3; j++)
cout<<setw(4)<<a[i][j]<<' ';
cout<<endl;
}
cout<<endl;
}
void back(int k){
if(k==n){
for(int i=1; i<n; i++)
cout<<sol[i].xs-1<<' '<<sol[i].ys-1<<' '<<sol[i].xf-1<<' '<<sol[i].yf-1<<'\n';
exit(0);
}
for(int i=1; i<=n; i++)
if(!v[i].mort)
for(int d=0; d<4; d++)
{
int x = v[i].x, y = v[i].y, liber = 0, mort = 0;
if(a[ x+2*dx[d] ][ y+2*dy[d] ]==GOL) liber = 1;
int id = a[ x+dx[d] ][ y+dy[d] ];
if(id>0 and !v[id].mort) mort = id;
if(liber and mort){
sol[k].xs = x; sol[k].ys = y;
sol[k].xf = x+2*dx[d]; sol[k].yf = y+2*dy[d];
a[ x+2*dx[d] ][ y+2*dy[d] ] = a[x][y];
a[x][y] = 0;
a[ x+dx[d] ][ y+dy[d] ] = 0;
v[mort].mort = 1;
v[i].x = x+2*dx[d]; v[i].y = y+2*dy[d];
back(k+1);
v[i].x = x; v[i].y = y;
v[mort].mort = 0;
a[ x+dx[d] ][ y+dy[d] ] = mort;
a[x][y] = a[ x+2*dx[d] ][ y+2*dy[d] ];
a[ x+2*dx[d] ][ y+2*dy[d] ] = 0;
}
}
}
int main()
{
cin>>lin>>col>>n;
for(int i=1; i<=n; i++){
cin>>v[i].x>>v[i].y;
v[i].x++; v[i].y++;
a[ v[i].x ][ v[i].y ] = i;
}
for(int i=0; i<=lin+3; i++) a[i][0] = a[i][1] = a[i][col+2] = a[i][col+3] = POM;
for(int i=0; i<=col+3; i++) a[0][i] = a[1][i] = a[lin+2][i] = a[lin+3][i] = POM;
back(1);
return 0;
}