fork download
#include<iostream>
//#include<fstream>

using namespace std;

//ifstream fin("labyrinth.in");

const int N_MAX = 2005;
const int M_MAX = 2005;

int N, M;

unsigned int poz_init_X, poz_init_Y;
unsigned int poz_finala_X, poz_finala_Y;

unsigned int matrice[N_MAX][M_MAX];

const int di[4] = {-1, 0, 1,  0};

const int dj[4] = {0,  1, 0, -1};

void Citire()
{
    cin >> N >> M;
    cin >> poz_init_X >> poz_init_Y;
    
    cin >> poz_finala_X >> poz_finala_Y;

    for(int i = 0; i < N; i++)
    
        for(int j = 0; j < M; j++)
        
            cin >> matrice[i][j];
}

bool check(int i, int j)
{
     return i >= 0 && i < N && j >= 0 && j < M;
}

void afisare()
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < M; j++)
        
            cout << matrice[i][j] << " ";

        cout << "\n";
    }
    cout << "\n\n";
}

void solve(int i, int j, int level)
{
        for(int k = 0; k < 4; k++)
        {

            int i_vecin = i + di[k];
            
            int j_vecin = j + dj[k];
            
            if( check(i_vecin, j_vecin) && !matrice[i_vecin][j_vecin] )
            {
                matrice[i_vecin][j_vecin] = level;
                
                if(i_vecin == poz_finala_X && j_vecin == poz_finala_Y) afisare();
                
                else                            
                    solve(i_vecin, j_vecin, level + 1);
                
                    matrice[i_vecin][j_vecin] = 0;
            }
        }

}

int main()
{
    Citire();
    
    matrice[poz_init_X][poz_init_Y] = 1;
    
    solve(poz_init_X, poz_init_Y, 2);
    
    return 0;
}
Success #stdin #stdout 0.01s 5516KB
stdin
5 8
0 0
4 7
0 0 1 1 1 1 0 0
1 0 0 0 0 0 0 1
1 1 0 1 1 1 0 1
7 0 0 0 0 0 0 0
0 0 1 1 1 1 1 0
stdout
1 2 1 1 1 1 0 0 
1 3 4 5 6 7 8 1 
1 1 0 1 1 1 9 1 
7 0 0 0 0 0 10 11 
0 0 1 1 1 1 1 12 


1 2 1 1 1 1 0 0 
1 3 4 0 0 0 0 1 
1 1 5 1 1 1 0 1 
7 0 6 7 8 9 10 11 
0 0 1 1 1 1 1 12