madalinaradu

IA Toate cautarile

May 29th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 20.36 KB | None | 0 0
  1. #include<iostream>
  2. #include<conio.h>
  3. #include<iomanip>
  4.  
  5. using namespace std;
  6.  
  7. //const char *nume[20] ={ "Oradea", "Zerind",  " Arad",  "Sibiu", "Fagaras",  "Timisoara",  "Ramnicu Valcea",  "Lugoj",  "Pitesti",  "Mehadia",  "Drobeta",  "Craiova",  "Giurgiu",  "Bucuresti",  "Urziceni",  "Eforie",  "Harsova",  "Vaslui",  "Iasi",  "Neamt"};
  8.         // noduri[]            0       1          2         3         4              5              6            7          8           9           10           11          12           13        14           15          16           17        18        19
  9. //n, A[20][20],nod, noduri[20], nrNoduri, viz[], contorViz, parinte[], gasit, contorpas
  10. int H[20];
  11. int CreareMatrice(int A[20][20])
  12. {
  13.  
  14.     A[0][1] = 75;
  15.     A[1][0] = 75;
  16.  
  17.     A[0][2] = 140;
  18.     A[2][0] = 140;
  19.  
  20.     A[0][3] = 118;
  21.     A[3][0] = 118;
  22.  
  23.     A[1][4] = 71;
  24.     A[4][1] = 71;
  25.  
  26.     A[4][2] = 151;
  27.     A[2][4] = 151;
  28.  
  29.     A[3][7] = 111;
  30.     A[7][3] = 111;
  31.  
  32.     A[7][10] = 70;
  33.     A[10][7] = 70;
  34.  
  35.     A[10][11] = 75;
  36.     A[11][10] = 75;
  37.  
  38.     A[11][12] = 120;
  39.     A[12][11] = 120;
  40.  
  41.     A[2][5] = 99;
  42.     A[5][2] = 99;
  43.  
  44.     A[2][6] = 80;
  45.     A[6][2] = 80;
  46.  
  47.     A[6][12] = 146;
  48.     A[12][6] = 146;
  49.  
  50.     A[6][9] = 97;
  51.     A[9][6] = 97;
  52.  
  53.     A[12][9] = 138;
  54.     A[9][12] = 138;
  55.  
  56.     A[5][8] = 211;
  57.     A[8][5] = 211;
  58.  
  59.     A[9][8] = 101;
  60.     A[8][9] = 101;
  61.  
  62.     A[8][13] = 90;
  63.     A[13][8] = 90;
  64.  
  65.     A[8][14] = 85;
  66.     A[14][8] = 85;
  67.  
  68.     A[14][15] = 98;
  69.     A[15][14] = 98;
  70.  
  71.     A[15][16] = 86;
  72.     A[16][15] = 86;
  73.  
  74.     A[14][17] = 142;
  75.     A[17][14] = 142;
  76.  
  77.     A[17][18] = 92;
  78.     A[18][17] = 92;
  79.  
  80.     A[18][19] = 87;
  81.     A[19][18] = 87;
  82.  
  83.  
  84.     return 0;
  85. }
  86.  
  87. //creare H - se refera la distanta pana la Bucuresti
  88. int CreareVector(int H[20]){
  89.     H[0]=366; //Arad
  90.     H[1]=374;//Zerind
  91.     H[2]=253;//Sibiu
  92.     H[3]=329;//Timisoara
  93.     H[4]=380;//Oradea
  94.     H[5]=176;//Fagaras
  95.     H[6]=193;//RV
  96.     H[7]=244;//Lugoj
  97.     H[8]=0;//Bucuresti
  98.     H[9]=101;//Pitesti
  99.     H[10]=241;//Mehadia
  100.     H[11]=242;//Drobeta
  101.     H[12]=160;//Craiova
  102.     H[13]=77;//Giurgiu
  103.     H[14]=80;//Urziceni
  104.     H[15]=151;//Hirsova
  105.     H[16]=161;//Efoerie
  106.     H[17]=199;//Vaslui
  107.     H[18]=226;//Iasi
  108.     H[19]=234;//Neamt
  109.     return 0;
  110. }
  111.  
  112. int gasireVecini(int n,int A[20][20], /*char *nume[20],*/int noduri[20],int &nrNoduri)
  113. {
  114.     //cout << "Orasul " << nume[n] << " are ca vecini:" << endl;
  115.     for(int i=0; i<20; i++)
  116.         if (A[n][i] != 0)
  117.         {
  118.             noduri[nrNoduri++] = i;
  119.             //cout << "-" << nume[i] << " aflat la " << A[n][i] << " km distanta" << endl;
  120.         }
  121.  
  122.     return 0;
  123. }
  124.  
  125.  
  126. int latime(int start, int stop, int A[20][20], char *nume[20])
  127. {
  128.     int nrNoduri = 0, contorViz = 0;
  129.  
  130.     int noduri[20];///orasele in asteptare
  131.     int viz[20];///orase deja vizitate
  132.     int parinte[20];///parinte[i]=j =>j este parintele lui i
  133.     int gasit = 0;
  134.     for (int i = 0; i < 20; i++)
  135.         viz[i] = 0;
  136.     viz[start] = 1;
  137.     noduri[0] = start;
  138.     nrNoduri++;
  139.     cout<<"nrNoduri la pasul 0: "<<nrNoduri<<" "<<endl;
  140.     int contorpas = 0;
  141.  
  142.     cout << "Pasul " << contorpas << ": ";
  143.     contorpas++;
  144.  
  145.     for (int i = 0; i < nrNoduri; i++)
  146.  
  147.         cout << nume[noduri[i]] << " ";///i=0, noduri[0]=0, nume[noduri[i]]=0 arad;
  148.     cout << endl;
  149.  
  150.     while (gasit == 0 && nrNoduri > 0)
  151.     {
  152.         int nod = noduri[0];///am inceput folosirea variabilei nod
  153.  
  154.         //cout << nume[nod] << " ";
  155.  
  156.         for (int i = 0; i < nrNoduri - 1; i++)
  157.  
  158.             noduri[i] = noduri[i + 1];///scoate nod din fata si scade nr de noduri
  159.  
  160.         nrNoduri--;
  161.          //cout<<"nrNoduri dupa for: "<<nrNoduri<<" "<<endl;
  162.          cout<<endl;
  163.  
  164.         if (nod == stop)
  165.  
  166.             gasit = 1;
  167.  
  168.         else
  169.             for (int i = 0; i<20; i++)
  170.  
  171.                 if ((A[nod][i] != 0) && (viz[i] == 0))
  172.                 {
  173.                     noduri[nrNoduri++] = i;
  174.  
  175.                     viz[i] = 1;//cout << "-" << nume[i] << " aflat la " << A[n][i] << " km distanta" << endl;
  176.  
  177.                     parinte[i] = nod;
  178.                 }
  179.         cout << "Pasul " << contorpas++ << ": ";
  180.  
  181.         for (int i = 0; i < nrNoduri; i++)
  182.  
  183.             cout << nume[noduri[i]] << " "<<"**";
  184.             cout<<"nrNoduri: "<<nrNoduri<<" "<<endl;
  185.         cout << endl;
  186.         //cout << nume[nod] << " ";
  187.  
  188.     }
  189.     cout << endl;
  190.     int temp = stop;
  191.     int contorTraseu = 0;
  192.     int traseu[20];
  193.     while (parinte[temp] != start)
  194.     {
  195.         traseu[contorTraseu] = temp;
  196.         contorTraseu++;
  197.         temp = parinte[temp];
  198.     }
  199.     traseu[contorTraseu] = temp;
  200.     contorTraseu++;
  201.     traseu[contorTraseu] = parinte[temp];
  202.     contorTraseu++;
  203.     cout <<"Traseu: ";
  204.     for (int i = contorTraseu - 1; i >= 0; i--)
  205.     {
  206.         cout <<nume[traseu[i]] << ", ";
  207.     }
  208.  
  209.     return 0;
  210. }
  211.  
  212. int adancime(int start, int stop, int A[20][20], char *nume[20])
  213. {
  214.  
  215.  
  216.  
  217.     int nrNoduri = 0, contorViz = 0;
  218.  
  219.     int noduri[20];//orasele in asteptare
  220.     int viz[20];//orase deja vizitate
  221.     int parinte[20];//parinte[i]=j =>j este parintele lui i
  222.     int gasit = 0;
  223.     for (int i = 0; i < 20; i++)
  224.         viz[i] = 0;
  225.     viz[start] = 1;
  226.     noduri[0] = start;
  227.     nrNoduri++;
  228.     int contorpas = 0;
  229.  
  230.     cout << "Pasul " << contorpas++ << ": ";
  231.     for (int i = 0; i < nrNoduri; i++)
  232.         cout << nume[noduri[i]] << " ";
  233.     cout << endl;
  234.  
  235.  
  236.     while (gasit == 0 && nrNoduri > 0)
  237.     {
  238.         int nod = noduri[0];
  239.         for (int i = 0; i < nrNoduri - 1; i++)
  240.             noduri[i] = noduri[i + 1];
  241.         nrNoduri--;
  242.         if (nod == stop)
  243.             gasit = 1;
  244.         else
  245.             for (int i = 0; i<20; i++)
  246.                 if ((A[nod][i] != 0) && (viz[i] == 0))
  247.                 {
  248.                     for (int j = nrNoduri-1; j >= 0; j--)
  249.                         noduri[j+1] = noduri[j];
  250.                     nrNoduri++;
  251.                     noduri[0] = i;
  252.                     viz[i] = 1;
  253.                     parinte[i] = nod;
  254.                 }
  255.         cout << "Pasul " << contorpas++ << ": ";
  256.         for (int i = 0; i < nrNoduri; i++)
  257.             cout << nume[noduri[i]] << " ";
  258.         cout << endl;
  259.  
  260.     }
  261.     cout << endl;
  262.     int temp = stop;
  263.     int contorTraseu = 0;
  264.     int traseu[20];
  265.     while (parinte[temp] != start)
  266.     {
  267.         traseu[contorTraseu++] = temp;
  268.         temp = parinte[temp];
  269.     }
  270.     traseu[contorTraseu++] = temp;
  271.     traseu[contorTraseu++] = parinte[temp];
  272.     for (int i = contorTraseu - 1; i >= 0; i--)
  273.     {
  274.         cout << nume[traseu[i]] << ", ";
  275.     }
  276.  
  277.     return 0;
  278. }
  279. //cautare limitata stocam adancimea fiecarui nod din arbore
  280.  
  281. int adancimeLimitata(int start, int stop, int A[20][20], char *nume[20], int limita)
  282. {
  283.  
  284.     int nrNoduri = 0, contorViz = 0;
  285.  
  286.     int noduri[20];//orasele in asteptare
  287.     int viz[20];//orase deja vizitate
  288.     int parinte[20];//parinte[i]=j =>j este parintele lui i
  289.     int gasit = 0;
  290.     for (int i = 0; i < 20; i++)
  291.         viz[i] = 0;
  292.     viz[start] = 1;
  293.     noduri[0] = start;
  294.     nrNoduri++;
  295.     int contorpas = 0;
  296.  
  297.     cout << "Pasul " << contorpas++ << ": ";
  298.     for (int i = 0; i < nrNoduri; i++)
  299.         cout << nume[noduri[i]] << " ";
  300.     cout << endl;
  301.     int adancime[20];
  302.     adancime[start]=0;
  303.  
  304.  
  305.     while (gasit == 0 && nrNoduri > 0)
  306.     {
  307.         int nod = noduri[0];
  308.         for (int i = 0; i < nrNoduri - 1; i++)
  309.             noduri[i] = noduri[i + 1];
  310.         nrNoduri--;
  311.         if (nod == stop)
  312.             gasit = 1;
  313.         else
  314.             for (int i = 0; i<20; i++)
  315.                 if ((A[nod][i] != 0) && (viz[i] == 0) && adancime[nod]<limita-1)
  316.                 {
  317.                     for (int j = nrNoduri-1; j >= 0; j--)
  318.                         noduri[j+1] = noduri[j];
  319.                     nrNoduri++;
  320.                     noduri[0] = i;
  321.                     viz[i] = 1;
  322.                     parinte[i] = nod;
  323.                     adancime[i]=adancime[nod]+1;
  324.                 }
  325.         cout << "Pasul " << contorpas++ << ": ";
  326.         for (int i = 0; i < nrNoduri; i++)
  327.         {
  328.             cout << nume[noduri[i]] << " ";
  329.         }
  330.         cout << endl;
  331.     }
  332.  
  333.     if(gasit)
  334.     {
  335.         cout << endl;
  336.         int temp = stop;
  337.         int contorTraseu = 0;
  338.         int traseu[20];
  339.         while (parinte[temp] != start)
  340.         {
  341.             traseu[contorTraseu++] = temp;
  342.             temp = parinte[temp];
  343.         }
  344.         traseu[contorTraseu++] = temp;
  345.         traseu[contorTraseu++] = parinte[temp];
  346.         for (int i = contorTraseu - 1; i >= 0; i--)
  347.         {
  348.             cout<<nume[traseu[i]]<<" "<<adancime[traseu[i]] <<", ";
  349.         }
  350.     }
  351.     else
  352.         cout<<"nu  s-a gasit drum de la  "<<nume[start]<<" la  " <<nume[stop]<<"cu limita  "<<limita<<endl;
  353.     return 0;
  354. }
  355.  
  356. int cautareLimApel(int start, int stop, int A[20][20], char *nume[20], int limita)
  357. {
  358.  
  359.     int nrNoduri = 0, contorViz = 0;
  360.  
  361.     int noduri[20];//orasele in asteptare
  362.     int viz[20];//orase deja vizitate
  363.     int parinte[20];//parinte[i]=j =>j este parintele lui i
  364.     int gasit = 0;
  365.     for (int i = 0; i < 20; i++)
  366.         viz[i] = 0;
  367.     viz[start] = 1;
  368.     noduri[0] = start;
  369.     nrNoduri++;
  370.     int contorpas = 0;
  371.  
  372.     cout << "Pasul " << contorpas++ << ": ";
  373.     for (int i = 0; i < nrNoduri; i++)
  374.         cout << nume[noduri[i]] << " ";
  375.     cout << endl;
  376.     int adancime[20];
  377.     adancime[start]=0;
  378.  
  379.     while (gasit == 0 && nrNoduri > 0)
  380.     {
  381.         int nod = noduri[0];
  382.         for (int i = 0; i < nrNoduri - 1; i++)
  383.             noduri[i] = noduri[i + 1];
  384.         nrNoduri--;
  385.         if (nod == stop)
  386.             gasit = 1;
  387.         else
  388.             for (int i = 0; i<20; i++)
  389.                 if ((A[nod][i] != 0) && (viz[i] == 0) && adancime[nod]<limita-1)
  390.                 {
  391.                     for (int j = nrNoduri-1; j >= 0; j--)
  392.                         noduri[j+1] = noduri[j];
  393.                     nrNoduri++;
  394.                     noduri[0] = i;
  395.                     viz[i] = 1;
  396.                     parinte[i] = nod;
  397.                     adancime[i]=adancime[nod]+1;
  398.                 }
  399.         cout << "Pasul " << contorpas++ << ": ";
  400.         for (int i = 0; i < nrNoduri; i++)
  401.         {
  402.             cout << nume[noduri[i]] << " ";
  403.         }
  404.         cout << endl;
  405.     }
  406.  
  407.     if(gasit)
  408.     {
  409.         cout << endl;
  410.         int temp = stop;
  411.         int contorTraseu = 0;
  412.         int traseu[20];
  413.         while (parinte[temp] != start)
  414.         {
  415.             traseu[contorTraseu++] = temp;
  416.             temp = parinte[temp];
  417.         }
  418.         traseu[contorTraseu++] = temp;
  419.         traseu[contorTraseu++] = parinte[temp];
  420.         for (int i = contorTraseu - 1; i >= 0; i--)
  421.         {
  422.             cout<<nume[traseu[i]]<<" "<<adancime[traseu[i]] <<", ";
  423.         }
  424.     }
  425.     return gasit;
  426. }
  427.  
  428. void cautareIterativa(int start, int stop, int A[20][20], char *nume[20])
  429. {
  430.     int gasit = 0;
  431.     int limita = 1;
  432.     while((limita < 20) && (gasit == 0))
  433.     {
  434.         gasit = cautareLimApel(start,stop,A,nume, limita);
  435.         if (gasit == 0)
  436.             limita++;
  437.     }
  438.     if (gasit)
  439.         cout<<"solutia a fost gasita cu cautare iterativa si limita"<<limita<<endl;
  440. }
  441.  
  442.  
  443. int cautareCostUniform(int start, int stop, int A[20][20], char *nume[20])
  444. {
  445.  
  446.  
  447.     int cost[20];
  448.     cost[start]=0;
  449.     int nrNoduri = 0, contorViz = 0;
  450.  
  451.     int noduri[40];//orasele in asteptare
  452.     int viz[20];//orase deja vizitate
  453.     int parinte[20];//parinte[i]=j =>j este parintele lui i
  454.     int gasit = 0;
  455.     for (int i = 0; i < 20; i++)
  456.         viz[i] = 0;
  457.     viz[start] = 1;
  458.     noduri[0] = start;
  459.     nrNoduri++;
  460.     int contorpas = 0;
  461.  
  462.  
  463.     cout << "Pasul " << contorpas++ << ": ";
  464.     for (int i = 0; i < nrNoduri; i++)
  465.         cout << nume[noduri[i]] << " ";
  466.     cout << endl;
  467.  
  468.  
  469.     while (gasit == 0 && nrNoduri > 0)
  470.     {
  471.         int nod = noduri[0];
  472.         for (int i = 0; i < nrNoduri - 1; i++)
  473.             noduri[i] = noduri[i + 1];
  474.         nrNoduri--;
  475.         if (nod == stop)
  476.             gasit = 1;
  477.         else
  478.             for (int i = 0; i<20; i++)
  479.                 if ((A[nod][i] != 0) )  //
  480.                 {
  481.                     int costNou=cost[nod]+A[nod][i];
  482.                     if(viz[i]==0 ||(cost[i]>costNou))
  483.                     {
  484.                         viz[i] = 1;
  485.                         parinte[i] = nod;
  486.                         cost[i]=cost[nod]+A[nod][i];
  487.                         int poz=0;
  488.                         while((poz<nrNoduri)&&(cost[i]>cost[noduri[poz]]))
  489.                             poz++;
  490.                         cout<<poz<<endl;
  491.  
  492.                         for(int j=nrNoduri; j>poz; j--)
  493.                         {
  494.                             noduri[j]=noduri[j-1];
  495.                         }
  496.  
  497.                         noduri[poz]=i;
  498.  
  499.                         nrNoduri++;
  500.                     }
  501.  
  502.  
  503.                 }
  504.         cout << "Pasul " << contorpas++ << ": ";
  505.         for (int i = 0; i < nrNoduri; i++)
  506.             cout << nume[noduri[i]] << " ";
  507.         cout << endl;
  508.  
  509.     }
  510.     cout << endl;
  511.     int temp = stop;
  512.     int contorTraseu = 0;
  513.     int traseu[20];
  514.     while (parinte[temp] != start)
  515.     {
  516.         traseu[contorTraseu++] = temp;
  517.         temp = parinte[temp];
  518.     }
  519.     traseu[contorTraseu++] = temp;
  520.     traseu[contorTraseu++] = parinte[temp];
  521.     for (int i = contorTraseu - 1; i >= 0; i--)
  522.     {
  523.         cout << nume[traseu[i]] << " "<<cost[traseu[i]]<<", ";
  524.     }
  525.  
  526.     return 0;
  527. }
  528. int cautareGreedy(int start, int stop, int A[20][20], char *nume[20])
  529. {
  530.  
  531.  
  532.     int cost[20];
  533.     cost[start]=0;
  534.     int nrNoduri = 0, contorViz = 0;
  535.  
  536.     int noduri[40];//orasele in asteptare
  537.     int viz[20];//orase deja vizitate
  538.     int parinte[20];//parinte[i]=j =>j este parintele lui i
  539.     int gasit = 0;
  540.     for (int i = 0; i < 20; i++)
  541.         viz[i] = 0;
  542.     viz[start] = 1;
  543.     noduri[0] = start;
  544.     nrNoduri++;
  545.     int contorpas = 0;
  546.  
  547.  
  548.     cout << "Pasul " << contorpas++ << ": ";
  549.     for (int i = 0; i < nrNoduri; i++)
  550.         cout << nume[noduri[i]] << " ";
  551.     cout << endl;
  552.  
  553.  
  554.     while (gasit == 0 && nrNoduri > 0)
  555.     {
  556.         int nod = noduri[0];
  557.         for (int i = 0; i < nrNoduri - 1; i++)
  558.             noduri[i] = noduri[i + 1];
  559.         nrNoduri--;
  560.         if (nod == stop)
  561.             gasit = 1;
  562.         else
  563.             for (int i = 0; i<20; i++)
  564.                 if ((A[nod][i] != 0) )  //
  565.                 {
  566.                     int costNou=cost[nod]+A[nod][i];
  567.                     if(viz[i]==0)
  568.                     {
  569.                         viz[i] = 1;
  570.                         parinte[i] = nod;
  571.                         cost[i]=cost[nod]+A[nod][i];
  572.                         int poz=0;
  573.                         while((poz<nrNoduri)&&(H[i]>H[noduri[poz]]))
  574.                             poz++;
  575.                         cout<<poz<<endl;
  576.  
  577.                         for(int j=nrNoduri; j>poz; j--)
  578.                         {
  579.                             noduri[j]=noduri[j-1];
  580.                         }
  581.  
  582.                         noduri[poz]=i;
  583.  
  584.                         nrNoduri++;
  585.                     }
  586.  
  587.  
  588.                 }
  589.         cout << "Pasul " << contorpas++ << ": ";
  590.         for (int i = 0; i < nrNoduri; i++)
  591.             cout << nume[noduri[i]] << " ";
  592.         cout << endl;
  593.  
  594.     }
  595.     cout << endl;
  596.     int temp = stop;
  597.     int contorTraseu = 0;
  598.     int traseu[20];
  599.     while (parinte[temp] != start)
  600.     {
  601.         traseu[contorTraseu++] = temp;
  602.         temp = parinte[temp];
  603.     }
  604.     traseu[contorTraseu++] = temp;
  605.     traseu[contorTraseu++] = parinte[temp];
  606.     for (int i = contorTraseu - 1; i >= 0; i--)
  607.     {
  608.         cout << nume[traseu[i]] << " "<<cost[traseu[i]]<<", ";
  609.     }
  610.  
  611.     return 0;
  612. }
  613.  
  614. int cautareAStar(int start, int stop, int A[20][20], char *nume[20])
  615. {
  616.  
  617.  
  618.     int cost[20];
  619.     cost[start]=0;
  620.     int nrNoduri = 0, contorViz = 0;
  621.  
  622.     int noduri[40];//orasele in asteptare
  623.     int viz[20];//orase deja vizitate
  624.     int parinte[20];//parinte[i]=j =>j este parintele lui i
  625.     int gasit = 0;
  626.     for (int i = 0; i < 20; i++)
  627.         viz[i] = 0;
  628.     viz[start] = 1;
  629.     noduri[0] = start;
  630.     nrNoduri++;
  631.     int contorpas = 0;
  632.  
  633.  
  634.     cout << "Pasul " << contorpas++ << ": ";
  635.     for (int i = 0; i < nrNoduri; i++)
  636.         cout << nume[noduri[i]] << " ";
  637.     cout << endl;
  638.  
  639.  
  640.     while (gasit == 0 && nrNoduri > 0)
  641.     {
  642.         int nod = noduri[0];
  643.         for (int i = 0; i < nrNoduri - 1; i++)
  644.             noduri[i] = noduri[i + 1];
  645.         nrNoduri--;
  646.         if (nod == stop)
  647.             gasit = 1;
  648.         else
  649.             for (int i = 0; i<20; i++)
  650.                 if ((A[nod][i] != 0) )  //
  651.                 {
  652.                     int costNou=cost[nod]+A[nod][i];
  653.                     if(viz[i]==0 ||(cost[i]>costNou))
  654.                     {
  655.                         viz[i] = 1;
  656.                         parinte[i] = nod;
  657.                         cost[i]=cost[nod]+A[nod][i];
  658.                         int poz=0;
  659.                         while((poz<nrNoduri)&&((cost[i]+H[i])>(cost[noduri[poz]]+H[noduri[poz]])))
  660.                             poz++;
  661.                         cout<<poz<<endl;
  662.  
  663.                         for(int j=nrNoduri; j>poz; j--)
  664.                         {
  665.                             noduri[j]=noduri[j-1];
  666.                         }
  667.                         noduri[poz]=i;
  668.  
  669.                         nrNoduri++;
  670.                     }
  671.  
  672.  
  673.                 }
  674.         cout << "Pasul " << contorpas++ << ": ";
  675.         for (int i = 0; i < nrNoduri; i++)
  676.             cout << nume[noduri[i]] << " ";
  677.         cout << endl;
  678.  
  679.     }
  680.     cout << endl;
  681.     int temp = stop;
  682.     int contorTraseu = 0;
  683.     int traseu[20];
  684.     while (parinte[temp] != start)
  685.     {
  686.         traseu[contorTraseu++] = temp;
  687.         temp = parinte[temp];
  688.     }
  689.     traseu[contorTraseu++] = temp;
  690.     traseu[contorTraseu++] = parinte[temp];
  691.     for (int i = contorTraseu - 1; i >= 0; i--)
  692.     {
  693.         cout << nume[traseu[i]] << " "<<cost[traseu[i]]<<", ";
  694.     }
  695.  
  696.     return 0;
  697. }
  698. int main()
  699. {
  700.      char *nume[20] = { "Arad", "Zerind", "Sibiu", "Timisoara", "Oradea", "Fagaras", "Ramnicu Valcea", "Lugoj", "Bucuresti", "Pitesti", "Mehadia", "Drobeta", "Craiova", "Giurgiu", "Urziceni", "Hirsova", "Eforie", "Vaslui", "Iasi", "Neamt" };
  701.             //                   0         1        2          3          4          5              6            7          8           9         10          11        12         13         14          15         16        17       18      19
  702.  
  703.     int A[20][20] = { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  704.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  705.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  706.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  707.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  708.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  709.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  710.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  711.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  712.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  713.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  714.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  715.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  716.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  717.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  718.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  719.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  720.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  721.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  722.         { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 },
  723.     };
  724.  
  725.  
  726.     CreareMatrice(A);
  727.     CreareVector(H);
  728.     int start = 0, stop = 8;
  729.     cout << endl<<"Cautare in latime:" << endl;
  730.     latime(start, stop, A, nume);
  731.     cout << endl << endl<< "Cautare in adancime:" << endl;
  732.     adancime(start, stop, A, nume);
  733.     cout << endl << endl<< "Cautare in adancime limitata:" << endl;
  734.     adancimeLimitata(start,stop,A,nume,4);
  735.     cout << endl << endl<< "Cautare in adancime limitata:" << endl;
  736.     cautareIterativa(start,stop,A,nume);
  737.     cout << endl << endl<< "Cautare cost uniform:" << endl;
  738.     cautareCostUniform(start,stop,A,nume);
  739.     cout << endl << endl<< "Cautare Greedy:" << endl;
  740.     cautareGreedy(start,stop,A,nume);
  741.     cout << endl << endl<< "Cautare A*:" << endl;
  742.     cautareAStar(start,stop,A,nume);
  743.     _getch();
  744.     return 0;
  745. }
Advertisement
Add Comment
Please, Sign In to add comment