Cod sursă (job #403306)

Utilizator avatar alex2209alex Pavel Alexandru alex2209alex IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 1,75 kb
Rundă Arhiva de probleme Status evaluat
Dată 18 nov. 2018 19:46:07 Scor 30
#include <fstream>

using namespace std;
ifstream f("immortal.in");
ofstream g("immortal.out");
int n,m,rasp,t,l1[16],c1[16],c2[16],l2[16],r,v2[21][21],d1[5]={0,-1,0,1,0},d2[5]={0,0,1,0,-1};
struct
{
    int x,y;
}v[16];
void bkt(int nr)
{
    if(nr==1)
    {
        for(int i=1; i<t; i++)
        {
            g<<l1[i]<<" "<<c1[i]<<" "<<l2[i]<<" "<<c2[i]<<'\n';
        }
        r=1;
        return;
    }
    if(r==1)
    {
        return;
    }
    for(int i=1; i<=t; i++)
    {
        if(v2[v[i].x][v[i].y]==1)
        {
            for(int j=1; j<=4; j++)
            {
                int l=v[i].x;
                int c=v[i].y;
                if(l+2*d1[j]<=n && l+2*d1[j]>=1 && c+2*d2[j]<=m && c+2*d2[j]>=1 && v2[l+d1[j]][c+d2[j]]==1 && v2[l+2*d1[j]][c+2*d2[j]]==0)
                {
                    rasp++;
                    l1[rasp]=l;
                    c1[rasp]=c;
                    l2[rasp]=l+2*d1[j];
                    c2[rasp]=c+2*d2[j];
                    v2[l+d1[j]][c+d2[j]]=0;
                    v2[l+2*d1[j]][c+2*d2[j]]=1;
                    v2[l][c]=0;
                    v[i].x+=2*d1[j];
                    v[i].y+=2*d2[j];
                    bkt(nr-1);
                    if(r==1)
                    {
                        return;
                    }
                    rasp--;
                    v2[l+d1[j]][c+d2[j]]=1;
                    v2[l+2*d1[j]][c+2*d2[j]]=0;
                    v2[l][c]=1;
                    v[i].x=l;
                    v[i].y=c;
                }
            }
        }
    }
}
int main()
{
    f>>n>>m>>t;
    for(int i=1; i<=t; i++)
    {
        f>>v[i].x>>v[i].y;
        v2[v[i].x][v[i].y]=1;
    }
    bkt(t);
    return 0;
}