Cod sursă (job #333354)

Utilizator avatar iulianrotaru Rotaru Iulian iulianrotaru IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 1,64 kb
Rundă Arhiva de probleme Status evaluat
Dată 21 dec. 2017 11:36:23 Scor 50
#include <fstream>
using namespace std;
struct pos
{
    int x,y;
}v[16];
struct mv
{
    pos s,e;
}st[16];
const int dx[]={0,1,0,-1},dy[]={-1,0,1,0};
int n,m,k,a[22][22];
bool sol;
ifstream fin("immortal.in");
ofstream fout("immortal.out");
void back(int pos)
{
    for(int i=1;i<=k;++i)
    {
        int x=v[i].x,y=v[i].y;
        if(!x)
            continue;
        for(int j=0;j<4;++j)
        {
            int ox=x+dx[j],oy=y+dy[j],nx=ox+dx[j],ny=oy+dy[j];
            if(a[ox][oy])
                if(!a[nx][ny] && nx && ny && nx<=n && ny<=m)
                {
                    int opp=a[ox][oy];
                    v[opp].x=0;
                    a[ox][oy]=a[x][y]=0;
                    a[nx][ny]=i;
                    st[pos].s=v[i];
                    v[i].x=nx;
                    v[i].y=ny;
                    st[pos].e=v[i];
                    if(pos==k-2)
                    {
                        for(int i=0;i<k-1;++i)
                            fout<<st[i].s.x<<" "<<st[i].s.y<<" "<<st[i].e.x<<" "<<st[i].e.y<<"\n";
                        sol=1;
                    }
                    else
                        back(pos+1);
                    if(sol)
                        return;
                    v[i].x=x;
                    v[i].y=y;
                    v[opp].x=ox;
                    a[x][y]=i;
                    a[ox][oy]=opp;
                    a[nx][ny]=0;
                }
        }
    }
}
int main()
{
    fin>>n>>m>>k;
    for(int i=1;i<=k;++i)
    {
        fin>>v[i].x>>v[i].y;
        a[v[i].x][v[i].y]=i;
    }
    back(0);
    return 0;
}