Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <iostream>
- using namespace std;
- int a[20][20];
- int vizitat[20];
- void Afisare() {
- for (int i = 0;i < 20;i++) {
- for (int j = 0;j < 20;j++) {
- cout << a[i][j] << " ";
- }
- cout << endl;
- }
- }
- void main() {
- char *nume[20] = { "0 Arad","1 Bucuresti","2 Craiova", "3 Drobeta","4 Eforie","5 Fagarasi","6 Giurgiu","7 Hirsova","8 Iasi","9 Lugoj","10 Mehadia","11 Neamt","12 Oradea","13 Pitesti","14 Rimnicu Valcea","15 Sibiu","16 Timisoara","17 Urziceni","18 Vaslui","19 Zerind" };
- int noduri[20];
- int nr_noduri = 0;
- int n = 20;
- int oras_Start=12, oras_Destinatie=6;
- int adancime[20]; //stocheaza adancimea fiecarui nod //
- int limita = 15;
- int solutie[20];
- int parinte[20];
- int nr_solutie = 0;
- /*
- cout << "Introduceti oras start: \n";
- cin >> oras_Start;
- cout << "Introduceti oras destinatie: \n";
- cin >> oras_Destinatie;
- */
- const int o_Destinatie = oras_Destinatie;
- a[0][16] = 1;
- a[0][15] = 1;
- a[0][19] = 1;
- a[1][5] = 1;
- a[1][6] = 1;
- a[1][13] = 1;
- a[1][17] = 1;
- a[2][3] = 1;
- a[2][13] = 1;
- a[2][14] = 1;
- a[3][10] = 1;
- a[3][2] = 1;
- a[4][7] = 1;
- a[5][1] = 1;
- a[5][15] = 1;
- a[7][17] = 1;
- a[8][11] = 1;
- a[8][18] = 1;
- a[9][10] = 1;
- a[9][16] = 1;
- a[12][19] = 1;
- a[12][15] = 1;
- a[13][14] = 1;
- a[14][15] = 1;
- a[17][18] = 1;
- for (int i = 0;i < 20;i++) {
- for (int j = 0;j < 20;j++) {
- a[j][i] = a[i][j];
- }
- }
- //cout << "Afisare" << endl;
- // Afisare();
- // int cautare;
- // cout << "Introduceti indicele orasului caruia vreti sa ii aflam vecinii: "; cin >> cautare;cout << endl;
- // cout << nume[cautare] << " are vecinii:" << endl;
- // for (int i = 0;i < 20;i++)
- // if (a[cautare][i] == 1) {
- // cout << nume[i] << " ";
- // }
- // CAUTAREA IN ADANCIME LIMITATA
- noduri[0] = oras_Start;
- nr_noduri++;
- vizitat[oras_Start] = 1;
- adancime[oras_Start] = 0;
- int gasit = 0;
- int nod;//nodul curent pe care il initializam
- while (gasit == 0 && (nr_noduri != 0)) {
- nod = noduri[0];//scoatem primul element din lista de noduri si il retinem in noduri
- for (int i = 0;i < nr_noduri - 1;i++) {
- noduri[i] = noduri[i + 1];
- }
- nr_noduri--;
- if (adancime[nod] <= limita)
- if (nod == oras_Destinatie) {
- gasit = 1;
- }
- else {
- for (int i = 0;i < 20;i++) {
- if ( (a[nod][i] == 1) && ( (vizitat[i] == 0 || (vizitat[i]==1 && adancime[i]>adancime[nod]+1)) ) ) {//orasele conectate de nod && nevizitate
- // adancimea veche > adancime noua
- // orasele conectate de nod SI (fie sunt nevizitate , fie au fost vizitate) dar la o adancime mai mare decat adancimea PE care ar primi-o acum
- //
- for (int i = nr_noduri;i > 0;) { // Adaugarea in lista de noduri la inceput a oraselor conectate de nodul Nod si nevizitate
- noduri[i] = noduri[(i--) - 1]; // noduri[i-1] si asta in loc de a mai pune i-- la for
- }
- noduri[0] = i; // aceste 3 linii se modifica la cautarea in latime
- nr_noduri++;
- vizitat[i] = 1;
- parinte[i] = nod;
- adancime[i] = adancime[nod] + 1;
- }
- }
- }
- }
- if (gasit == 0) {
- cout << "\nNu s-a gasit\n\n";
- }
- else {
- while (oras_Destinatie != oras_Start) {
- solutie[nr_solutie++] = oras_Destinatie;
- oras_Destinatie = parinte[oras_Destinatie];
- }
- solutie[nr_solutie] = oras_Start;
- cout << "\nCel mai rapid drum dintre " << nume[oras_Start] << " si " << nume[o_Destinatie] << " este\n";
- for (int i = nr_solutie; i >= 0; i--) {
- if (i != 0)
- cout <<"("<< nume[solutie[i]] << ") -> ";
- else cout << "(" << nume[solutie[i]] << ")";
- }
- }
- _getch();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement