Cod sursă (job #319736)

Utilizator avatar alexandra_patica Alexandra Patica alexandra_patica IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 2,05 kb
Rundă 11_1 Status evaluat
Dată 29 oct. 2017 13:07:58 Scor 0
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ("immortal.in");
ofstream g ("immortal.out");

int n, m, I, i, a[50][50], u[50][50], j, b[50][5], nr, x, y, ok;
short dx[]={-1, 0, 1, 0}, dy[]={0, 1, 0, -1};

void tipar (int u[50][50])
{
    for (int i=1; i<=n; i++){
        for (int j=1; j<=m; j++) g << u[i][j] << " ";
        g << '\n';
    }
    g << '\n';
    g << "da"<< '\n';
    for (int i=1; i<=I; i++){
        for (int j=1; j<=4; j++) g << b[i][j] << " ";
        g << '\n';
    }
    g << '\n';
}

void back(int i, int j)
{
    if (!ok){
    nr++;
    b[nr][1]=i; b[nr][2]=j;
//    tipar(u);
    for (int k=0; k<4; k++){
        int lv=i+dx[k];
        int cv=j+dy[k];
        if (lv>0 && lv<=n && cv>0 && cv<=m){
//                g << "daaaaaaaa" << '\n';
            if (u[lv][cv]==1 && u[lv+dx[k]][cv+dy[k]]==0){
                u[i][j]=0; u[lv][cv]=0; u[lv+dx[k]][cv+dy[k]]=1;
                b[nr][3]=lv+dx[k]; b[nr][4]=cv+dy[k];
//                tipar(u);
                if (nr==I-1){
                    for (int i=1; i<=nr; i++){
                        for (int j=1; j<=4; j++) g << b[i][j] << " ";
                        g << '\n';
                    }
                    g << '\n';
                    ok=1; return;
                }
                else back(lv+dx[k], cv+dy[k]);
                u[i][j]=1; u[lv][cv]=1; u[lv+dx[k]][cv+dy[k]]=0;
            }
        }
    }
    nr--;
    }
}

int main ()
{
    f >> n >> m >> I;
    for (i=1; i<=I; i++){
        f >> x >> y;
        a[x][y]=u[x][y]=1;
    }
//    tipar(u);
    for (i=1; i<=n; i++){
        if (!ok){
        for (j=1; j<=m; j++){
            if (!ok){
            if (a[i][j]){
                if (a[i][j-1]==1 || a[i][j+1]==1 || a[i-1][j]==1 || a[i+1][j]==1){
//                       g << i << "=i j=" << j << '\n';
                    memset(b, 0, sizeof(b));
                    back(i, j);
//                    g << '\n';
                }
            }
            }
        }
        }
    }
}