Advertisement
madalinaradu

IA C latime

May 30th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.68 KB | None | 0 0
  1. Cautare latime
  2. void afisareCoadaOrase(int nrNoduri, int noduri[], char *nume[20]){
  3.     for (int i = 0; i < nrNoduri; i++)
  4.         cout << nume[noduri[i]] << " ";///i=0, noduri[0]=0, nume[noduri[i]]=0 arad;
  5.     cout << endl;
  6. }
  7.  
  8. int latime(int start, int stop, int A[20][20], char *nume[20]) {
  9.     int contorViz = 0;
  10.     int noduri[20];///orasele in asteptare, e o coada
  11.     int nrNoduri = 0; ///nr de noduri din coada
  12.  
  13.     int viz[20];///viz[i] =1 daca orasul a fost vizitat , 0 altfel.
  14.  
  15.     int parinte[20];///parinte[i]=j =>j este parintele lui i
  16.  
  17.     int gasit = 0;
  18.  
  19.     //initial toate orasele sunt nevizitate
  20.     for (int i = 0; i < 20; i++)
  21.         viz[i] = 0;
  22.  
  23.     ///Pornim de la nodul de start si il marcam ca vizitat
  24.     viz[start] = 1;
  25.     //pun in coada nodul de start
  26.     noduri[0] = start;
  27.     nrNoduri++;
  28.  
  29.     cout<<"nrNoduri la pasul 0: "<<nrNoduri<<" "<<endl;
  30.     int contorpas = 0;
  31.  
  32.     cout << "Pasul " << contorpas << ": ";
  33.     contorpas++;
  34.  
  35.     afisareCoadaOrase(nrNoduri, noduri, nume);
  36.  
  37.     while (gasit == 0 && nrNoduri > 0) {
  38.         ///scot nodul din fata - start
  39.         int nod = noduri[0];///am inceput folosirea variabilei nod
  40.  
  41.         //cout << nume[nod] << " ";
  42.  
  43.  
  44.         for (int i = 0; i < nrNoduri - 1; i++)
  45.             noduri[i] = noduri[i + 1];///scoate nod din fata si scade nr de noduri
  46.         nrNoduri--;
  47.         ///scot nodul din fata - end
  48.  
  49.         //cout<<"nrNoduri dupa for: "<<nrNoduri<<" "<<endl;
  50.         cout<<endl;
  51.  
  52.         if (nod == stop)
  53.  
  54.             gasit = 1;
  55.  
  56.         else
  57.             ///caut in matricea A pe liniea corespunzatoare lui nod vecini adica elementele diferite de 0.
  58.             ///Iau doar
  59.             for (int i = 0; i<20; i++)
  60.                 if ((A[nod][i] != 0) && (viz[i] == 0)) {
  61.                     noduri[nrNoduri++] = i;//  am gasit un vecin nevizitat si il adaug in coada
  62.  
  63.                     viz[i] = 1;//cout << "-" << nume[i] << " aflat la " << A[n][i] << " km distanta" << endl;
  64.  
  65.                     parinte[i] = nod; /// parinte de i retine nodul de unde a plecat
  66.                 }
  67.         cout << "Pasul " << contorpas++ << ": ";
  68.  
  69.         afisareCoadaOrase(nrNoduri, noduri, nume);
  70.     }
  71.  
  72.     cout << endl;
  73.     int temp = stop;
  74.     int contorTraseu = 0;
  75.     int traseu[20];
  76.     while (parinte[temp] != start) {
  77.         traseu[contorTraseu] = temp;
  78.         contorTraseu++;
  79.         temp = parinte[temp];
  80.     }
  81.     traseu[contorTraseu] = temp;
  82.     contorTraseu++;
  83.     traseu[contorTraseu] = parinte[temp];
  84.     contorTraseu++;
  85.     cout <<"Traseu: ";
  86.     for (int i = contorTraseu - 1; i >= 0; i--) {
  87.         cout <<nume[traseu[i]] << ", ";
  88.     }
  89.  
  90.     return 0;
  91. }
  92.  
  93. int H[20];
  94. int CreareMatrice(int A[20][20]) {
  95.  
  96.     A[0][1] = 75;
  97.     A[1][0] = 75;
  98.  
  99.     A[0][2] = 140;
  100.     A[2][0] = 140;
  101.  
  102.     A[0][3] = 118;
  103.     A[3][0] = 118;
  104.  
  105.     A[1][4] = 71;
  106.     A[4][1] = 71;
  107.  
  108.     A[4][2] = 151;
  109.     A[2][4] = 151;
  110.  
  111.     A[3][7] = 111;
  112.     A[7][3] = 111;
  113.  
  114.     A[7][10] = 70;
  115.     A[10][7] = 70;
  116.  
  117.     A[10][11] = 75;
  118.     A[11][10] = 75;
  119.  
  120.     A[11][12] = 120;
  121.     A[12][11] = 120;
  122.  
  123.     A[2][5] = 99;
  124.     A[5][2] = 99;
  125.  
  126.     A[2][6] = 80;
  127.     A[6][2] = 80;
  128.  
  129.     A[6][12] = 146;
  130.     A[12][6] = 146;
  131.  
  132.     A[6][9] = 97;
  133.     A[9][6] = 97;
  134.  
  135.     A[12][9] = 138;
  136.     A[9][12] = 138;
  137.  
  138.     A[5][8] = 211;
  139.     A[8][5] = 211;
  140.  
  141.     A[9][8] = 101;
  142.     A[8][9] = 101;
  143.  
  144.     A[8][13] = 90;
  145.     A[13][8] = 90;
  146.  
  147.     A[8][14] = 85;
  148.     A[14][8] = 85;
  149.  
  150.     A[14][15] = 98;
  151.     A[15][14] = 98;
  152.  
  153.     A[15][16] = 86;
  154.     A[16][15] = 86;
  155.  
  156.     A[14][17] = 142;
  157.     A[17][14] = 142;
  158.  
  159.     A[17][18] = 92;
  160.     A[18][17] = 92;
  161.  
  162.     A[18][19] = 87;
  163.     A[19][18] = 87;
  164.  
  165.  
  166.     return 0;
  167. }
  168.  
  169. int main() {
  170.     char *nume[20] = { "Arad", "Zerind", "Sibiu", "Timisoara", "Oradea", "Fagaras", "Ramnicu Valcea", "Lugoj", "Bucuresti", "Pitesti", "Mehadia", "Drobeta", "Craiova", "Giurgiu", "Urziceni", "Hirsova", "Eforie", "Vaslui", "Iasi", "Neamt" };
  171.     //                   0         1        2          3          4          5              6            7          8           9         10          11        12         13         14          15         16        17       18      19
  172.     for(int i=0; i<20; i++)}
  173.         for(j=0; j<20; j++){
  174.             A[i][j]=0;
  175.         }
  176.         }
  177.  
  178.  
  179.     CreareMatrice(A);
  180.     for(int i=0;i<20;i++){
  181.         for(int j=i+1;j<20;j++){
  182.             if(A[i][j]!=0){
  183.                 printf("%5d%5d%5d\n",i,j,A[i][j]);
  184.             }
  185.         }
  186.     }
  187.     cout<<"-----------"<<endl;
  188.     CreareVector(H);
  189.     int start = 0, stop = 8;
  190.     cout << endl<<"Cautare in latime:" << endl;
  191.     latime(start, stop, A, nume);
  192.     _getch();
  193.     return 0;
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement