Informatică, întrebare adresată de AndreiSfarc, 9 ani în urmă

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ăspunsuri la întrebare

Răspuns de ionutg38
5
#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; }

ionutg38: De ce nu dai enuntul complet al problemei?
Alte întrebări interesante