Guest User

Untitled

a guest
Jan 2nd, 2022
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.99 KB | None | 0 0
  1. // Kiss Endre Farkas (KIELAAT.elte)
  2. // Fesz�t�fa sz�less�gi bej�r�ssal.
  3. #include <iostream>
  4. using namespace std;
  5. typedef enum{NEM, IGEN} logikai;
  6. typedef int PontTip;
  7. typedef int szamSor[10];
  8. typedef PontTip Sor[10];
  9. typedef logikai Graf[10][10];
  10. // A halmaz egy logikai t�mb, adott indexen IGEN jelzi, ha benne van valami
  11. typedef logikai Halmaz[10];
  12.  
  13. struct grafEl{
  14.         int kezd;
  15.         int veg;
  16. };
  17.  
  18. // A sz�less�gi bej�r�sok �br�zol�s�ra szolg�l� adatstrukt�ra
  19. struct bejarasEredmeny{
  20.         szamSor sorozat;
  21.         int pontSzam;
  22. };
  23.    
  24.  
  25. class alapGraf {
  26.   private:
  27.     int x, y;
  28.     // Sorhoz sz�ks�ges v�ltoz�k:
  29.     int SorEleje, SorVege;
  30.     int SorHossz;
  31.     logikai SorHiba;
  32.    
  33.   public:
  34.     // Adatstrukt�r�k (sor, halmaz, cs�csm�trixos gr�f) deklar�l�sa
  35.     Sor se;
  36.     Halmaz ha;
  37.     Graf ge;
  38.     void probaAdatok();
  39.     void csucsmatrixRajzol();
  40.     int pontSzam();
  41.     // Sor m�veletek:
  42.     void SorUres ();
  43.     logikai SorUresE();
  44.     logikai SorTeleE();
  45.     PontTip SorElso();
  46.     void Sorba(PontTip);
  47.     PontTip Sorbol();
  48.     logikai SorHibasE ();
  49.     // Halmaz m�veletek:
  50.     void HalmazUres();
  51.     void Halmazba(PontTip);
  52.     void PontKiir(PontTip);
  53.     logikai Eleme(PontTip);
  54.     // gr�f m�veletek:
  55.     void GrafUres();
  56.     void Osszekot (PontTip, PontTip);
  57.     void Elszakit (PontTip, PontTip);
  58.     logikai vanEl (PontTip, PontTip);
  59.     int SzomszedPontokSzama(PontTip);
  60.     int minimumPont();
  61.     PontTip SzomszedPont(PontTip, int);
  62.    
  63.     grafEl grafBeolvas();
  64.    
  65.     // konstruktor:
  66.     alapGraf(){
  67.                SorUres();
  68.                HalmazUres();
  69.                GrafUres();
  70.     }
  71.     // destruktor:
  72.     ~alapGraf(){
  73.     }  
  74.    
  75. };
  76.  
  77. // lesz�zmazott oszt�ly
  78. class bejaras : public alapGraf
  79. {
  80.  public:
  81.       alapGraf grafom;
  82.       bejarasEredmeny szelessegiBejaras (PontTip);
  83.       bejaras operator+(int ezSor);
  84. };
  85.  
  86. bejaras bejaras::operator+(int ezSor) {
  87.   bejaras helyi;
  88.   int i;
  89.   helyi.GrafUres();
  90.   for (i=1; i<=10; i++) {
  91.       helyi.ge[ezSor][i]=IGEN;
  92.   }
  93.   return (helyi);
  94. }
  95.  
  96. bejarasEredmeny bejaras::szelessegiBejaras(PontTip tol) {
  97. PontTip pont, szomszed;
  98. int i;
  99.     bejarasEredmeny eredmeny;
  100.     eredmeny.pontSzam=0;
  101.     for (i=1; i<=10; i++) {eredmeny.sorozat[i]=0;}
  102.    
  103.     pont=tol;
  104.     SorUres(); HalmazUres();
  105.     Sorba(pont); Halmazba(pont);
  106.     while (SorUresE()==NEM)
  107.     {  
  108.        pont=Sorbol();
  109.        eredmeny.pontSzam++;
  110.        eredmeny.sorozat[eredmeny.pontSzam]=pont;
  111.        // PontKiir(pont);
  112.        for (i=1; i<=SzomszedPontokSzama(pont); i++) {
  113.            szomszed=SzomszedPont(pont, i);
  114.            if (Eleme(szomszed)==NEM) {
  115.               Sorba(szomszed);
  116.               Halmazba(szomszed);
  117.            }
  118.        }
  119.     }
  120.     return eredmeny;
  121. }
  122.  
  123. int alapGraf::minimumPont() {
  124.     // Megadja a legkisebb indexu pontot, ahonnan indul ki el
  125.     int kiindulo,d,f;
  126.     kiindulo=11;
  127.     for (d=10; d>=1; d--) {
  128.          f=10;
  129.          while (f>=1) {
  130.              if (ge[d][f]==IGEN) {
  131.                 if (kiindulo>d) {kiindulo=d;}
  132.                 f=1;                      
  133.              }
  134.          f--;
  135.          }
  136.      }
  137.      return kiindulo;
  138. }
  139.  
  140. int alapGraf::pontSzam() {
  141.     // Megadja, hogy hany pont van a grafban, amikol indul ki el
  142.     int ennyi,i,j;
  143.     ennyi=0; i=1;
  144.     while (i<=10)
  145.     {
  146.          j=1;
  147.          while (j<=10)
  148.          {
  149.              if (ge[i][j]==IGEN)
  150.              {
  151.                 ennyi++;
  152.                 j=11;
  153.              }
  154.              j++;
  155.          }
  156.          i++;
  157.      }
  158.      return ennyi;
  159. }
  160.  
  161. void alapGraf::csucsmatrixRajzol() {
  162.      int i,j;
  163.      cout<<"\nCsucsmatrix\n";
  164.      cout<<"(- - nincs kapcsolat, T - van kapcsolat) \n";
  165.      for (i=1; i<=10; i++) {
  166.          for (j=1; j<=10; j++) {
  167.              if (ge[i][j]==IGEN) {cout<<"T ";} else {cout<<"- ";}
  168.          }
  169.          cout<<"\n";
  170.      }
  171.      cout<<"\n";
  172. }
  173.  
  174. void alapGraf::probaAdatok() {
  175.      
  176.      Osszekot(1,2);
  177.      Osszekot(1,3);
  178.      Osszekot(2,3);
  179.      Osszekot(2,4);
  180.      Osszekot(3,4);
  181.      Osszekot(2,6);
  182.      Osszekot(3,5);
  183.      Osszekot(4,5);
  184.      Osszekot(4,6);
  185.      Osszekot(5,6);
  186.      
  187.      cout<<"\nProba adatok sikeresen betoltve.\n";
  188. }
  189. void alapGraf::PontKiir(PontTip p) {
  190.      cout<<" "<< p<<" ";
  191. }
  192.  
  193. // Halmatm�veletek kidolgozva:
  194. void alapGraf::HalmazUres() {
  195. int i;
  196.     for (i=1; i<=10; i++) {
  197.         ha[i]=NEM;
  198.     }
  199. }
  200. void alapGraf::Halmazba(PontTip p) {
  201.      ha[p]=IGEN;  
  202. }
  203. logikai alapGraf::Eleme(PontTip p) {
  204.     return ha[p];
  205. }    
  206.          
  207. // Sor m�veletek kidolgozva:
  208.  
  209. void alapGraf::SorUres() {
  210.      SorEleje=1;
  211.      SorVege=1;
  212.      SorHossz=0;
  213.      SorHiba=NEM;
  214. }
  215. logikai alapGraf::SorUresE() {
  216.      // cout<<"SorUresE\n";
  217.      logikai logik;  
  218.      if (SorHossz==0) {logik=IGEN;} else {logik=NEM;}
  219.      return logik;
  220. }
  221. logikai alapGraf::SorTeleE() {
  222.      logikai logik;
  223.      if (SorHossz==10) {logik=IGEN;} else {logik=NEM;}
  224.      return logik;
  225. }
  226. PontTip alapGraf::SorElso() {
  227.      PontTip ez;
  228.      if (SorHossz>0) {
  229.         ez=se[SorEleje];                
  230.      } else {
  231.        SorHiba==IGEN;
  232.      }
  233.      return ez;
  234. }
  235. void alapGraf::Sorba(PontTip pont) {
  236.      if (SorHossz<10) {
  237.         se[SorVege]=pont;
  238.         SorHossz++;
  239.         SorVege++;
  240.         if (SorVege==10) { SorVege=1; }  
  241.      } else {
  242.         SorHiba=IGEN;
  243.      }
  244. }
  245. PontTip alapGraf::Sorbol() {
  246.      PontTip pont;
  247.      if (SorHossz>0)
  248.      {
  249.         pont=se[SorEleje];
  250.         SorHossz--;
  251.         SorEleje++;
  252.         if (SorEleje==10) { SorEleje=1; }
  253.      }
  254.      return pont;    
  255. }
  256. logikai alapGraf::SorHibasE() {
  257.         logikai logik;
  258.         if (SorHiba==IGEN) {logik=IGEN;} else {logik=NEM;}
  259.         return logik;
  260. }
  261.  
  262. // Gr�f m�veletek kidolgozva:
  263. void alapGraf::GrafUres() {
  264.      int i,j;
  265.      
  266.      for (i=1; i<=10; i++) {
  267.          for (j=1; j<=10; j++) {
  268.              ge[i][j]=NEM;
  269.          }
  270.      }
  271. }
  272. void alapGraf::Osszekot (PontTip p, PontTip q) {
  273.      ge[p][q]=IGEN;
  274.      ge[q][p]=IGEN; // visszafele is lehet menni
  275. }
  276. void alapGraf::Elszakit (PontTip p, PontTip q) {
  277.      ge[p][q]=NEM;
  278. }
  279. logikai alapGraf::vanEl (PontTip p, PontTip q) {
  280.         return ge[p][q];
  281. }
  282. int alapGraf::SzomszedPontokSzama(PontTip p) {
  283.     int db;      
  284.     PontTip i;
  285.     db=0;
  286.     for (i=1; i<=10; i++) {
  287.         if (ge[p][i]==IGEN) {db++;}
  288.     }
  289.     return db;
  290. }
  291. PontTip alapGraf::SzomszedPont(PontTip p, int i) {
  292.     logikai megvan;
  293.     PontTip j,k;
  294.     megvan=NEM;
  295.     j=0; k=0;
  296.     while (megvan==NEM) {
  297.           j++;
  298.           if (ge[p][j]==IGEN) {k++;}
  299.           if (k==i) {megvan=IGEN;}
  300.     }
  301.     return j;
  302. }
  303. grafEl alapGraf::grafBeolvas() {
  304.      logikai joszam;
  305.      int innen, ide;
  306.      grafEl eredmeny;
  307.      cout << "Graf adatainak beolvas�sa. \n";
  308.      joszam=IGEN;
  309.      while (joszam==IGEN) {  
  310.            cout<<"El kiindulo pontja (1-10)?";
  311.            cin>>innen;
  312.            cout<<"\n";
  313.            if (innen>10)
  314.             {
  315.               cout<<"HIBAS ADAT! (Csak 10 pont van!) \n";
  316.               joszam=IGEN;
  317.             } else {
  318.               joszam=NEM;
  319.             }
  320.      }
  321.  
  322.      joszam=IGEN;
  323.      while (joszam==IGEN) {
  324.            cout<<"Kivalasztott kezdopont: "; cout<<innen; cout<<"\n";
  325.            cout<<"El vegpontja (1-10)?";
  326.            cin>>ide;
  327.            cout<<"\n";
  328.            if (ide>10)
  329.            {
  330.               cout<<"HIBAS ADAT! (Csak 10 pont van!) \n";
  331.               joszam=IGEN;
  332.            } else {
  333.              joszam=NEM;
  334.            }
  335.                                  
  336.      }
  337.      eredmeny.kezd=innen;
  338.      eredmeny.veg=ide;
  339.  
  340.      return eredmeny;
  341. }
  342.  
  343. void menu () {
  344.     cout<<"- SZELESSEGI BEJARAS CSUCSMATRIX GRAFBAN -  \n\n";
  345.     cout<<"1) Csucsmatrix megjelenitese. \n";
  346.     cout<<"2) Grafelek bevitele. \n";
  347.     cout<<"3) Proba adatok betoltese. \n";
  348.     cout<<"4) Feszitofa megadasa. \n";
  349.     cout<<"5) Segitseg. \n";
  350.     cout<<"6) Pontot mindennel osszekot. \n";
  351.     cout<<"7) Kilepes. \n\n";
  352. }
  353.  
  354. void segitseg () {
  355.      cout<<"\n- SEGITSEG -  \n\n";
  356.      cout<<"Ennek a programnak az a feladata, hogy egy \n";
  357.      cout<<"csucsmatrix-szal abzazolt grafnak adja meg\n";
  358.      cout<<"egy feszitofajat szelessegi bejaras alapjan.\n";
  359.      cout<<"A program kezelesi a kezdeti menupontok alapjan.\n\n";
  360. }
  361.  
  362. int menuPontBeker(int min, int max) {
  363.     // Bek�r egy 'min' �s 'max' k�z�tti sz�mot, majd visszaadja
  364.     logikai helyesValasz;
  365.     helyesValasz=NEM;
  366.     int valaszom;
  367.     valaszom=0;
  368.     while (helyesValasz==NEM) {
  369.             cout<<"\n Valasszon ("<<min<<"-"<<max<<"), majd <ENTER>!";
  370.             cin>>valaszom;
  371.             if (valaszom<min) {
  372.                 helyesValasz=NEM;
  373.             } else {
  374.                 if (valaszom<=max) {
  375.                     helyesValasz=IGEN;  
  376.                 }
  377.             }
  378.             if (valaszom>max) {
  379.                 helyesValasz=NEM;
  380.             }
  381.             if (helyesValasz==NEM)
  382.             {
  383.                 cout<<"\n HIBAS valasztas! ("<<min<<" es " <<max<<" kozott valasszon!)\n";
  384.             }
  385.     }
  386.     return valaszom;
  387. }
  388.  
  389. void eredmenyKiir(bejarasEredmeny eredmeny) {
  390.      int i;
  391.      cout<<"A megtalalt feszitofa:\n";
  392.      i=1;
  393.      while (i<=eredmeny.pontSzam) {
  394.            cout<<eredmeny.sorozat[i]<<" ";
  395.            i++;
  396.      }
  397. }
  398.  
  399. int main () {
  400.   int funkcio, kezdes, pontokSzama, i, maxFeszitofa, maxFeszitofaIndex, extraPont;
  401.   bejarasEredmeny eredmeny;
  402.   grafEl aktualEl;
  403.   bejaras helyigraf;
  404.   alapGraf alap;
  405.   helyigraf.GrafUres();
  406.   funkcio=0;
  407.   cout<<"\nUdvozoljuk a fesztitofa kereso programban!";
  408.   cout<<"\nKesztette: Kiss Endre Farkas (KIELAAT.elte)";
  409.   while (funkcio<7) {
  410.         system("PAUSE");cout<<"\n";
  411.         menu();
  412.         funkcio=menuPontBeker(1,7);
  413.         switch (funkcio)
  414.         {
  415.          case 1:
  416.               helyigraf.csucsmatrixRajzol(); break;
  417.          case 2:
  418.               aktualEl=helyigraf.grafBeolvas();
  419.               helyigraf.Osszekot(aktualEl.kezd, aktualEl.veg);
  420.               cout<<"Grafel sikeresen rogzitve. \n\n";
  421.          break;
  422.          case 3: helyigraf.probaAdatok(); break;
  423.          case 4:
  424.                  cout<<"\nFeszitofa szelessegi bejarassal:\n\n";
  425.                  kezdes=helyigraf.minimumPont(); //A legkisebb, �llel rendelkez� pont
  426.                  if (kezdes==11) {
  427.                    cout<<"Nincsenek elek a grafban.\n";
  428.                    cout<<"Igy nem kesztitheto feszitofa.\n\n";
  429.                  } else {
  430.                    pontokSzama=helyigraf.pontSzam();
  431.                    
  432.                    // Minden kezdponttal megpr�b�lunk gener�lni fesz�t�f�t
  433.                    maxFeszitofa=0;
  434.                    maxFeszitofaIndex=1;
  435.                    for (i=1; i<=10; i++) {
  436.                        eredmeny=helyigraf.szelessegiBejaras(i);
  437.                        if (eredmeny.pontSzam>maxFeszitofa)
  438.                        {
  439.                           maxFeszitofa=eredmeny.pontSzam;
  440.                           maxFeszitofaIndex=i;
  441.                        }
  442.                    }
  443.                    // V�g�l a legt�bb pontot �rtint� eredm�nyt vessz�k alapul
  444.                    eredmeny=helyigraf.szelessegiBejaras(maxFeszitofaIndex);
  445.                    if (eredmeny.pontSzam==pontokSzama) {
  446.                       eredmenyKiir(eredmeny);
  447.                       cout<<"\n\nSikeres bejaras.\n\n";
  448.                    } else {
  449.                      cout<<"\nA grafban sajnos vannak izolalt pontok,\n";
  450.                      cout<<"ezert nem lehet fesztifat megadni hozza.\n\n";
  451.                    }
  452.                  }
  453.                  break;
  454.          case 5: segitseg(); break;
  455.          case 6:
  456.               cout<<"\nA grafban minden pont torlese, majd.";
  457.               cout<<"\negy pont osszekotese az osszes t�bbivel.";
  458.               cout<<"\nMelyik ponttal vegezzem el a muveletet? (1-10)";
  459.               extraPont=menuPontBeker(1,10);
  460.               // Oper�tor tesztel�se
  461.               helyigraf = helyigraf+extraPont;
  462.               break;
  463.          case 7: cout<<"Viszlat!\n"; break;
  464.          default: break;
  465.         }
  466.   }
  467.   return 0;
  468. }
  469.  
  470.  
Advertisement
Add Comment
Please, Sign In to add comment