Pagini recente » Cod sursa (job #3241367) | Cod sursa (job #928455) | Cod sursa (job #2551620) | Cod sursa (job #279191) | Cod sursa (job #1268788)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("immortal.in");
ofstream out("immortal.out");
int n,m,I,a[25][25],r[20][5],u,NN;
bool cc=1;
struct punct{int l,c;} N[20];
void sari(int n1, int n2);
int main()
{
in>>n>>m>>I;
int i,l,c;
NN=I;
//for(i=0;i<=n+1;i++)
//a[i][0]=a[i][m+1]=-1;
//for(i=0;i<=m+1;i++)
//a[0][i]=a[n+1][i]=-1;
for(i=1;i<=I;i++)
{
in>>l>>c;
a[l][c]=i;
N[i].l=l;
N[i].c=c;
}
for(i=1;i<=I;i++)
if(N[i].l && N[i].c && cc)
{
l=N[i].l; c=N[i].c;
if(a[l-1][c] && a[l-2][c]==0 && l-2>0) sari(a[l][c],a[l-1][c]);
if(a[l][c+1] && a[l][c+2]==0 && c+2<=m) sari(a[l][c],a[l][c+1]);
if(a[l+1][c] && a[l+2][c]==0 && l+2<=n) sari(a[l][c],a[l+1][c]);
if(a[l][c-1] && a[l][c-2]==0 && c-2>0) sari(a[l][c],a[l][c-1]);
}
for(i=1;i<I;i++)
out<<r[i][1]<<' '<<r[i][2]<<' '<<r[i][3]<<' '<<r[i][4]<<'\n';
}
//void sari(int l1,int c1,int l2,int c2)
void sari(int n1, int n2)
{
int l1,l2,c1,c2,lf,cf;
l1=N[n1].l; c1=N[n1].c; l2=N[n2].l; c2=N[n2].c;
lf=2*l2-l1;
cf=2*c2-c1;
a[l1][c1]=0;
a[l2][c2]=0;
a[lf][cf]=n1;
N[n1].l=lf;
N[n1].c=cf;
N[n2].l=0;
N[n2].c=0;
u++;
if(cc)
{
r[u][1]=l1;
r[u][2]=c1;
r[u][3]=lf;
r[u][4]=cf;
//cout<<l1<<' '<<c1<<' '<<lf<<' '<<cf<<'\n';
}
NN--;
if(NN==1) cc=0;
if(cc)
{
int i,l,c;
for(i=1;i<=I;i++)
if(N[i].l && N[i].c && cc)
{
l=N[i].l; c=N[i].c;
if(a[l-1][c] && a[l-2][c]==0 && l-2>0) sari(a[l][c],a[l-1][c]);
if(a[l][c+1] && a[l][c+2]==0 && c+2<=m) sari(a[l][c],a[l][c+1]);
if(a[l+1][c] && a[l+2][c]==0 && l+2<=n) sari(a[l][c],a[l+1][c]);
if(a[l][c-1] && a[l][c-2]==0 && c-2>0) sari(a[l][c],a[l][c-1]);
}
a[l1][c1]=n1;
a[l2][c2]=n2;
a[lf][cf]=0;
N[n1].l=l1;
N[n1].c=c1;
N[n2].l=l2;
N[n2].c=c2;
u--;
NN++;
}
}