Graf pomocí Adjency Matrix (matice sousednosti) - co se děje v metodě Graph? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Graf pomocí Adjency Matrix (matice sousednosti) - co se děje v metodě Graph? – C / C++ – Fórum – Programujte.comGraf pomocí Adjency Matrix (matice sousednosti) - co se děje v metodě Graph? – C / C++ – Fórum – Programujte.com

 

Supersonic
~ Anonymní uživatel
3 příspěvky
20. 3. 2016   #1
-
0
-

Zdravím, mohl by mi prosím někdo vysvětlit, co se děje v konstruktoru Graph resp. v paměti po vykonání teech příkazů? Zkoušel jsem si to nakreslit, dívat se do proměných v debuggeru, ale stejně mám v tom celkem guláš.

Princip, jakým graf funguje chápu, ale nechápu to řešení pomocí pointeru na pointer...

Já jsem to pochopil tak, že první bool pointer uchovává sloupce matice a druhý pointer uchovává sloupce matice, ale předpokládám, že takhle to asi nefunguje(?)

Předem díky za odpovědi.

#include<iostream>

using namespace std;

class Graph {

private:

      bool** adjacencyMatrix;
      int vertexCount;
public:
      Graph(int vertexCount) {
            this->vertexCount = vertexCount;
            adjacencyMatrix = new bool*[vertexCount];
            for (int i = 0; i < vertexCount; i++) {
                  adjacencyMatrix[i] = new bool[vertexCount];
                  for (int j = 0; j < vertexCount; j++)
                     adjacencyMatrix[i][j] = false;
            }
      }

      void addEdge(int i, int j) {
            if (i >= 0 && i < vertexCount && j > 0 && j < vertexCount) {
                  adjacencyMatrix[i][j] = true;
                  adjacencyMatrix[j][i] = true;
            }
      }

      void removeEdge(int i, int j) {
            if (i >= 0 && i < vertexCount && j > 0 && j < vertexCount) {
                  adjacencyMatrix[i][j] = false;
                  adjacencyMatrix[j][i] = false;
            }
      }

      bool isEdge(int i, int j) {
            if (i >= 0 && i < vertexCount && j > 0 && j < vertexCount)
                  return adjacencyMatrix[i][j];
            else
                  return false;
      }

      ~Graph() {
            for (int i = 0; i < vertexCount; i++)
                  delete[] adjacencyMatrix[i];
            delete[] adjacencyMatrix;
      }
};
int main()
{
    Graph graph(5);
    graph.addEdge(1,3);
    graph.addEdge(2,3);
    graph.addEdge(4,5);
    graph.removeEdge(2,3);
    return 0;
}
Nahlásit jako SPAM
IP: 217.196.213.–
KIIV
~ Moderátor
+43
God of flame
20. 3. 2016   #2
-
0
-

Prvni se tam vytvori pole ukazatelu pomoci:  adjacencyMatrix = new bool*[vertexCount];
Pak se vytvori do kazdeho z tech pointeru pole bool a jednotlive prvky se vynuluji

Nicmene to asi bude priserne zravy na pamet, protoze bool zabira minimalne cely bajt

Nahlásit jako SPAM
IP: 82.80.62.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 35 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý