Pagini recente »
Istoria paginii runda/concurs-cls5-21-12-2019/clasament
|
Utilizatori înregistrați la Testare Clasa a 7-a
|
oji_2020_1
|
Clasament 2015-11-03-clasa-6-tema-7
|
Cod sursă (job #645177)
Cod sursă (job
#645177)
#include <fstream>
using namespace std;
ifstream cin("immortal.in");
ofstream cout("immortal.out");
struct nem {
int x,y;
} v[25];
struct stck {
int x,y,z;
} v1[25];
int a[25][25],n,m,k,i,xx,yy,j,ex=0;
int dirx[]= {-1,0,1,0},diry[]= {0,1,0,-1};
void backt(int x) {
if(x==1) {
for(int i=k; i>1; i--)
cout<<v1[i].x-1<<" "<<v1[i].y-1<<" "<<v1[i].x+2*dirx[v1[i].z]-1<<" "<<v1[i].y+2*diry[v1[i].z]-1<<"\n";
exit(0);
}
for(int i=0; i<=k-1; i++) {
int l=v[i].x,c=v[i].y;
for(int j=0; j<=3; j++) {
int nexl=l+dirx[j],nexc=c+diry[j],nexxl=nexl+dirx[j],nexxc=nexc+diry[j];
if(a[nexl][nexc]>-1&&a[nexxl][nexxc]==-1) {
v1[x]= {l,c,j};
a[l][c]=-1;
v[i]= {nexxl,nexxc};
a[nexxl][nexxc]=i;
int mort=a[nexl][nexc];
if(mort<x-1) {
v[mort]=v[x-1];
a[v[mort].x][v[mort].y]=mort;
}
a[nexl][nexc]=-1;
backt(x-1);
if(mort<x-1) {
v[x-1]=v[mort];
a[v[x-1].x][v[x-1].y]=x-1;
v[mort]= {nexl,nexc};
}
a[nexl][nexc]=mort;
a[nexxl][nexxc]=-1;
v[i]= {l,c};
a[l][c]=i;
}
}
}
}
int main() {
cin>>n>>m>>k;
for(i=2; i<=m+1; i++)
a[0][i]=a[1][i]=a[n+2][i]=a[n+3][i]=k+1;
for(i=2; i<=n+1; i++)
a[i][0]=a[i][1]=a[i][m+2]=a[i][m+3]=k+1;
for(i=2; i<=n+1; i++)
for(j=2; j<=m+1; j++)
a[i][j]=-1;
for(i=1; i<=k; i++) {
cin>>xx>>yy;
a[xx+1][yy+1]=1;
}
int c=0;
for(i=2; i<=n+1; i++)
for(j=2; j<=m+1; j++)
if(a[i][j]==1) {
v[c].x=i;
v[c].y=j;
a[i][j]=c;
c++;
}
backt(k);
return 0;
}