Pagini recente »
Cod sursă (job #692070)
|
Cod sursă (job #547080)
|
Istoria paginii runda/2024-12-03-clasa-5-concurs02
|
Istoria paginii runda/hlo_lmk_vs_9
|
Cod sursă (job #669308)
Cod sursă (job
#669308)
#include <fstream>
using namespace std;
ifstream in ("immortal.in");
ofstream out ("immortal.out");
int initial[25][25];
int n,m,k;
int mort[25];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
struct lincol
{
int l,c,dir;
};
lincol v[25],ans[25];
bool ok(int lin,int col)
{
if (1<=lin && lin<=n && 1<=col && col<=m)
return 1;
else
return 0;
}
void afisare()
{
for (int i=1; i<=k-1; i++)
out<<ans[i].l<<" "<<ans[i].c<<" "<<ans[i].l+2*dx[ans[i].dir]<<" "<<ans[i].c+2*dy[ans[i].dir]<<"\n";
exit(0);
}
void bkt(int nemuritor)///lupta ac nemuritor
{
if (nemuritor==k)///daca am terminat toate luptele
afisare();
else
{
for (int j=1; j<=k; j++)
if (mort[j]==0)///daca exista un nemuritor
{
int lin,col;
lin=v[j].l;
col=v[j].c;///poz nemuritor
for (int d=0;d<=3;d++)///gasesc un inamic
{
int lin_enemy,col_enemy;
lin_enemy=lin+dx[d];
col_enemy=col+dy[d];
int llin,ccol;
llin=lin+2*dx[d];///poz unde ajunge dupa ce sare
ccol=col+2*dy[d];
if (ok(llin,ccol)==1 && initial[lin_enemy][col_enemy]>0 && initial[llin][ccol]==0)
{///daca exista un inamic si poz de dupa saritura e libera
int x,y;
x=initial[lin][col];
y=initial[lin_enemy][col_enemy];
v[j].l=llin;
v[j].c=ccol;///nemuritorul ia poz de dupa saritura
mort[y]=1;///enemy is dead
initial[lin][col]=0;///sterg poz initiala a nemuritorului
initial[lin_enemy][col_enemy]=0;///sterg poz inamicului
initial[llin][ccol]=j;///noua poz a nemuritorului
ans[nemuritor].l=lin;
ans[nemuritor].c=col;///modific de fiecare data ca un nemuritor isi schimba poz
ans[nemuritor].dir=d;
bkt(nemuritor+1);///continuam deplasarea=>o alta saritura
mort[y]=0;///redeclare how it was before
initial[lin][col]=x;
initial[lin_enemy][col_enemy]=y;
initial[llin][ccol]=0;
v[j].l=lin;
v[j].c=col;
}
}
}
}
}
int main()
{
in>>n>>m>>k;
for (int i=1;i<=k;i++)
{
in>>v[i].l>>v[i].c;
initial[v[i].l][v[i].c]=i;//aici se afla un nemuritor
}
bkt(1);//incepem cu prima lupta=>trb sa moara cnv
return 0;
}