Cerinţa
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ă.
Date de intrare
Fişierul de intrare soarece.in
conţine pe prima linie numerele n m
, separate printr-un spațiu. Următoarele n
linii conțin câte m
valori 0
sau 1
, separate prin exact un spațiu, care descriu tabla – valoarea 0
reprezintă o zonă liberă, valoarea 1
reprezintă o zonă ocupată cu un obstacol. Pe linia n+2
se află 4
numere separate prin exact un spațiu, reprezentând is js ib jb
.
Date de ieşire
Fişierul de ieşire soarece.out
va conţine pe prima linie numărul S
, reprezentând numărul de modalități prin care șoarecele poate ajunge de la poziția inițială la cea a bucății de brânză.
Restricţii şi precizări
1 ≤ n,m ≤ 10
1 ≤ is,ib ≤ n
,1 ≤ js,jb ≤ m
- poziția șoarecelui și cea a bucății de brânză nu sunt identice și sunt libere
Exemplu
soarece.in
6 7 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 0 1 1 0 1 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0 0 4 1 2 6
soarece.out
8
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Soarece:
#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;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #342 Soarece
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #342 Soarece de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!