👤

Se dă o tablă dreptunghiulară formată din n linii și m coloane, definind n*m zone, unele dintre ele fiind libere, altele conținând obstacole. În zona aflată la poziția is, js se află un șoarece care se poate deplasa pe tablă trecând din zona curentă în zona învecinată cu aceasta pe linie sau pe coloană. Scopul sau este să ajungă la o bucată de brânză aflată în zona de la poziția ib, jb, fără a părăsi tabla, fără a trece prin zone care conțin obstacole și fără a trece de două ori prin aceeași zonă. Determinați câte modalități prin care șoarecele poate ajunge de la poziția inițială la cea a bucății de brânză există.In C++

Răspuns :

#include <iostream> #include <iomanip> #include <fstream> using namespace std; ifstream fin("soarece.in"); ofstream fout("soarece.out"); int n,m,is,js,ib,jb,a[11][11], nrsol = 0; const int di[]={0,0,1,-1}, dj[]={1,-1,0,0}; void afis(){ nrsol++;; //for(int i=1;i<=n;++i){ // for(int j=1;j<=m;++j) // cout << setw(3) << a[i][j]; // cout << endl; //} //cout << endl; } void back(int i,int j, int pas) { if(i>0 && i<=n && j>0 && j<=m && a[i][j]==0) { a[i][j] = pas; if(i==ib && j==jb) afis(); else for(int k=0;k<4;++k) back(i+di[k], j+dj[k], pas+1); a[i][j] = 0; } } int main() { fin >> n >> m; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) fin >> a[i][j], a[i][j] = -a[i][j]; fin >> is >> js >> ib >> jb; back(is, js, 1); fout << nrsol; return 0; }
Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Ne dorim ca informațiile furnizate să vă fi fost utile. Dacă aveți întrebări sau aveți nevoie de suport suplimentar, nu ezitați să ne contactați. Revenirea dumneavoastră ne bucură, iar pentru acces rapid, adăugați-ne la favorite!


Ze Lesson: Alte intrebari