Cod sursă (job #293095)

Utilizator avatar micutu Andrei Vasile Cont Fraudulent micutu IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 2,23 kb
Rundă Arhiva de probleme Status evaluat
Dată 13 mar. 2017 10:56:17 Scor 30
#include <fstream>
#define NMAX 25

using namespace std;

ifstream f("immortal.in");
ofstream g("immortal.out");

int n, m, imm, mat[23][23];

struct punct
{
    int x, y;
} a, b;
struct lupta
{
    punct a, b;
};

punct v[NMAX*NMAX];
lupta lupte[NMAX*NMAX];
int uz[NMAX*NMAX];

int dl[]={-1, 0, 1, 0};
int dc[]={0, 1, 0, -1};
int ok;

void citire();
void bkt(int k);
void afisare();


int main()
{
    citire();
    bkt(1);
    afisare();
    return 0;
}

void citire()
{
    int i;
    f>>n>>m>>imm;
    for (i=1;i<=imm;i++)
    {
        f>>v[i].x>>v[i].y;
        mat[v[i].x][v[i].y]=i;
    }
}
void bkt(int k)
{
    int i, dir, l9, c9, muritor;
    punct luptator;

    if (ok==1) return;
    if (k==imm)
    {
        afisare();
        ok=1;
        return;
    }
    for (i=1; i<=imm; i++)
    {
        if (uz[i]==0)
        {
            for (dir=0;dir<4;dir++)
            {
                l9=v[i].x+dl[dir];
                c9=v[i].y+dc[dir];
                if(l9+dl[dir]<=0 || c9+dc[dir]<=0 || l9+dl[dir]>=n+1 || c9+dc[dir]>=m+1)
                    continue;
                if (mat[l9][c9]!=0 && mat[l9+dl[dir]][c9+dc[dir]]==0)
                {
                    lupte[k].a.x=v[i].x;
                    lupte[k].a.y=v[i].y;
                    lupte[k].b.x=l9+dl[dir];
                    lupte[k].b.y=c9+dc[dir];

                    luptator=v[i];
                    muritor=mat[l9][c9];
                    mat[luptator.x][luptator.y]=0;
                    mat[l9][c9]=0;
                    mat[l9+dl[dir]][c9+dc[dir]]=i;

                    uz[muritor]=1;
                    v[i].x=l9+dl[dir];
                    v[i].y=c9+dc[dir];

                    bkt(k+1);

                    uz[muritor]=0;
                    mat[l9][c9]=muritor;
                    mat[l9+dl[dir]][c9+dc[dir]]=0;
                    mat[luptator.x][luptator.y]=i;
                    v[i]=luptator;

                }
            }
        }
    }



}
void afisare()
{

    int i;
    for(i=1;i<=imm-1;i++)
    {
        g<<lupte[i].a.x<<' ';
        g<<lupte[i].a.y<<' ';
        g<<lupte[i].b.x<<' ';
        g<<lupte[i].b.y<<'\n';
    }
    g.close();
}