Grafuri orientate pe în*elesul tuturor cu ajutorul personajelor din:

Download Report

Transcript Grafuri orientate pe în*elesul tuturor cu ajutorul personajelor din:

Grafuri orientate pe înțelesul tuturor cu
ajutorul personajelor din:
La împlinirea vârstei de 10 ani, Ash Ketchum din
orașul Pallet, a fost informat de profesorul Oak că a venit
vremea să devină un antrenor Pokemon.
Prima sa misiune este aceea de a cauta toți pokemonii
aflați pe drumurile dintre orașul inițial și orașul destinație și
de a-i comunica profesorului numărul acestora. Însoțit de
Pikachu, un pokemon prietenos , Ash a pornit într-o lungă
călătorie plină de mister și pericole.
Micul antrenor era conștient de dificultatea
misiunii, deoarece Echipa Rachetă se putea afla oriunde,
pregatită să îl fure pe Pikachu.
Deși sentimentele de teamă îl cuprinseseră, continuă
să înainteze, dornic de reușită. Întâmplător, îl întâlnește pe
Brock, unul din prietenii săi cei mai buni și îi destăinuie
problema sa.
- Hai, Ash, nu mai fi supărat! Te ajut eu. Cunosc foarte
bine ascunzătorile Echipei Rachetă. O să iți fac o hartă ce
iți va fi de folos. Dar, să fii atent...toate șoselele ce duc în
orașul destinație au două sensuri de mers. Fiecare șosea
începe cu un indicator ce iți arată sensul în care ai voie să
te deplasezi.
-Și cum o să realizezi acea hartă?
-Simplu! O să mă folosesc de teoria grafurilor
orientate, învățate la orele de informatică.
-Ce sunt acelea grafuri orientate? întreabă Ash și
Pikachu uimiți.
- Un graf orientat reprezintă o pereche ordonată de
mulțimi G=(X,U), unde X este o mulțime finită și
nevidă, numită mulțimea nodurilor, și U este o mulțime
formată din perechi ordonate de elemente ale lui X,
numită mulțimea arcelor.
- Prin ce sunt redate aceste grafuri?
Există mai multe modalități de a reprezenta un graf:
1. Matricea de adiacență: este o matrice pătratică de ordinul
nxn, nesimetrică, pe diagonala principală nu exisă decât 0.
a[i][j] are valoarea 1 dacă (Xi , Xj) ∈ U
2. Matricea de incidență: este o matrice cu n linii și m
coloane și se definește astfel: a[i][j] este egal cu -1 dacă
nodul I e extremitatea inițială pentru arcul j, 1 dacă nodul
I este extremitate finală pentru arcul j, iar 0 în caz contrar
3. Vectorul de muchii: se definește o structură cu
două valori întregi reprezentate de cele două
extremități .
4. Matricea drumurilor: se definește astfel: a[i][j]
este egal cu 1 dacă există drum de la i la j și 0 în
caz contrar.
5. Matricea ponderilor
- Dar ce numești tu un „drum”?
- Un drum este o succesiune de noduri cu proprietatea
că oricare două noduri succesive sunt legate printr-un
arc.Se ține seama de orientarea arcurilor, iar dacă
nodurile sunt distincte se numește elementar.
- Bine. Acum am înțeles ce este acela un graf orientat, cum se
reprezintă, ce este un drum, dar tot nu înțeleg cum o să mă
ajute pe mine.
- Fii atent, după ce o să desenez harta, o să transform datele
furnizate de ea într-o matrice de adiacență și pe aceasta o să o
folosesc ca date de intrare pentru a realiza un program pe
calculator care să-ți spună exact câte drumuri sunt.
- Și o să-mi afișeze răspunsul corect, ești sigur de asta?
- Foarte sigur! O să folosim metoda Backtraking care să
genereze toate drumurile, dar care, în loc să le afișeze pe
ecran, le va număra cu ajutorul unei variabil de tip contor,
pe care o vom afișa la sfârșit, iar acela va fi răspunsul corect.
-Cât de ușor pare. O să dureze
mult să facem problema?
-Dacă lucrăm împreună, nu!
După foarte puțin timp, problema era terminată, datele de
intrare au fost introduse, iar calculatorul a afișat răspunsul pe
ecran.
- Brock, ai avut dreptate, zise Ash, chiar funcționează.
Mă bucur să am prieteni care chiar se pricep la
informatică. Aș vrea să învăț și eu.
- Dacă vrei întradevăr poți să vii săptămânal cu mine și
cu Misty la orele de informatica și sunt sigur că o să
înveți destul de repede, dar înainte de asta, ar trebui să
te duci să-i duci răspunsul profesorului Oak.
- Da, așa este!
Ash a ajuns la laboratorul profesorului care a fost
uimit de timpul scurt de care a avut Ash nevoie să
rezolve problema. I-a zis că este sigur că va deveni un
antrenor bun, pentru că are prieteni pe care se poate
baza și pentru că știe să folosească orice pentru a găsi
răspunsurile potrivite în orice situație.
Între timp în bârlogul Echipei Racheta...
- Iar au reușit puștii să câștige, dar nu-i nimic, o să
mai fie și alte ocazii, iar data viitoare Echipa
Rachetă va câștiga, iar Pikachu va fi al nostru!
#include<iostream.h>
int a[100][100],k,st[100],n,p=0,b,c;
void citire()
{ cin>>n>>b>>c;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>a[i][j];}
void init(int k) { st[k]=0;}
int succesor(int k)
{ if(st[k]<n) { st[k]++; return 1;}
else return 0;}
int valid(int k) { if(k>1)
for(int i=1;i<k;i++)
if(st[k]==st[i]) return 0;
for(int i=2;i<=k;i++)
if(a[st[k-1]][st[k]]==0)
return 0;
return 1;}
int solutie(int k)
{ return st[k]==b;}
void tipar( int k) { p++;}
void bt(int k) { init(k);
while(succesor(k)==1)
if(valid(k)==1)
if(solutie(k)==1) tipar(k);
else bt(k+1);}
int main() { citire();
st[1]=c;
bt(2);
cout<<p;}
Sfârșit
Proiect realizat de:
Balan Simona Mariana
Crăciun Roxana Ionela
Grofu Cristina Victoria
Niculescu Mirel Alexandru
Vasiloiu Alexandra Gabriela