Advertisement
ExIsTeR

IA/ Cautarea cost uniform

May 23rd, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. // CAUTAREA CU COST UNIFORM
  2.  
  3.     noduri[0] = oras_Start;
  4.     nr_noduri++;
  5.     vizitat[oras_Start] = 1;
  6.     cost[oras_Start] = 0;
  7.     int gasit = 0;
  8.     int nod;//nodul curent pe care il initializam
  9.     while (gasit == 0 && (nr_noduri != 0)) {
  10.  
  11.         nod = noduri[0];//scoatem primul element din lista de noduri si il retinem in noduri
  12.         for (int i = 0; i < nr_noduri - 1; i++) {
  13.             noduri[i] = noduri[i + 1];
  14.         }
  15.         nr_noduri--;
  16.  
  17.         if (nod == oras_Destinatie) {
  18.             gasit = 1;
  19.         }
  20.         else {
  21.             for (int i = 0; i < 20; i++) {
  22.                 if (a[nod][i] != 0 && ((vizitat[i] == 0) || ((vizitat[i] == 1) && (cost[i]>cost[nod] + a[nod][i])))) {//orasele conectate de nod && nevizitate
  23.                                                                                                                       // costul vechi e mai mare decat noul cost                                                                   
  24.                                                                                                                       //  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
  25.                                                                                                                       //e prea mare programul sa-ti dai seama cv =.="                                                                                             /
  26.                     cost[i] = cost[nod] + a[nod][i];
  27.                     int j = 0;
  28.                     while (cost[i] > cost[noduri[j]] && j < nr_noduri) {
  29.                         j++;// j va fi pozitia PE care inserez in lista de noduri
  30.                     }
  31.                     for (int i = nr_noduri; i > j; i--) { // Adaug acel i astfel incat lista sa fie ordonata crescator dupa cost
  32.                         noduri[i] = noduri[i - 1]; // noduri[i-1] si asta in loc de a mai pune i-- la for
  33.                     }
  34.                     noduri[j] = i; // aceste 3 linii se modifica la cautarea in latime
  35.                     nr_noduri++;
  36.                     vizitat[i] = 1;
  37.                     parinte[i] = nod;
  38.                     adancime[i] = adancime[nod] + 1;
  39.                 }
  40.             }
  41.         }
  42.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement