<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Attributierte Graphen]]></title><description><![CDATA[<p>Hallo C++ Gemeinde,</p>
<p>ich brauche eure Hilfe wegen der Umsetzung von Graphen in Quellcode. Es gibt ja unterschiedliche Modelle, wie man Gerichtete und Ungerichtete Graphen programmiertechnisch umsetzen kann, einmal mittels sog. &quot;Adjazenz-Matrix&quot; und dann als dynamische Datenstruktur als &quot;Adjazenz-Liste&quot;</p>
<p>Ich bearbeite im Moment die Adjazenz-Liste und dabei sollen &quot;Knoten&quot; und &quot;Kanten&quot; so miteinander verbunden werden, dass ein Gerichteter Graph entsteht.</p>
<p>Als einfaches Beispiel habe ich mir erstmal drei Knoten ausgedacht, die so miteinander verbunden sind:<br />
Man kann von Knoten 1 -&gt; 2 und auch von 2 -&gt; 1 zurueck,<br />
weiterhin geht es von 2 -&gt; 3, aber nicht umgekehrt,<br />
und von 3 -&gt; 1, aber nicht umgekehrt.<br />
Um zu den einzelnen Knoten hin- und her zu gelangen, kostet es natuerlich immer etwas...</p>
<p>Als Datenstruktur habe ich folgende ueberlegt:</p>
<pre><code>struct Knoten {
  int id;  // Numerierung des Knotens
  Kante *first;
  Knoten *next;
};

struct Kante {
  int kosten;  // Kosten fuer Verbindung zwischen zwei Knoten
  Knoten *knot;
  Kante *next;
};
</code></pre>
<p>Als Entwicklungsumgebung habe ich bisher Turbo C++ Version 3.0 (von 1992) ausprobiert und alternativ auch noch Dev-C++ Version 5 (4.9.9.2)</p>
<p>In beiden Programmen hat der Compiler den Code nicht akzeptiert, Turbo C++ meckerte, weil der (Zeiger-)Datentyp &quot;Kante&quot; in Knoten noch nicht bekannt sei, Dev-C++ hats gar nicht hingekriegt...</p>
<p>Ich weiss im Moment nicht richtig weiter, ich hab zwar schon 7 Jahre Programmiererfahrung in (Turbo) Pascal, programmier C++ aber erst seit etwa 2 Jahren. Gibt es vielleicht eine Moeglichkeit, einen Zeiger auf den struct &quot;Kante&quot; als leeren Typ oder FORWARD (wie in Pascal) vor &quot;Knoten&quot; zu deklarieren, sodass dieser Typ schon bekannt ist?</p>
<p>Waere super nett, wenn ihr mir helfen koenntet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262431/attributierte-graphen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 15:59:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262431.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 05 Mar 2010 19:56:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 19:56:12 GMT]]></title><description><![CDATA[<p>Hallo C++ Gemeinde,</p>
<p>ich brauche eure Hilfe wegen der Umsetzung von Graphen in Quellcode. Es gibt ja unterschiedliche Modelle, wie man Gerichtete und Ungerichtete Graphen programmiertechnisch umsetzen kann, einmal mittels sog. &quot;Adjazenz-Matrix&quot; und dann als dynamische Datenstruktur als &quot;Adjazenz-Liste&quot;</p>
<p>Ich bearbeite im Moment die Adjazenz-Liste und dabei sollen &quot;Knoten&quot; und &quot;Kanten&quot; so miteinander verbunden werden, dass ein Gerichteter Graph entsteht.</p>
<p>Als einfaches Beispiel habe ich mir erstmal drei Knoten ausgedacht, die so miteinander verbunden sind:<br />
Man kann von Knoten 1 -&gt; 2 und auch von 2 -&gt; 1 zurueck,<br />
weiterhin geht es von 2 -&gt; 3, aber nicht umgekehrt,<br />
und von 3 -&gt; 1, aber nicht umgekehrt.<br />
Um zu den einzelnen Knoten hin- und her zu gelangen, kostet es natuerlich immer etwas...</p>
<p>Als Datenstruktur habe ich folgende ueberlegt:</p>
<pre><code>struct Knoten {
  int id;  // Numerierung des Knotens
  Kante *first;
  Knoten *next;
};

struct Kante {
  int kosten;  // Kosten fuer Verbindung zwischen zwei Knoten
  Knoten *knot;
  Kante *next;
};
</code></pre>
<p>Als Entwicklungsumgebung habe ich bisher Turbo C++ Version 3.0 (von 1992) ausprobiert und alternativ auch noch Dev-C++ Version 5 (4.9.9.2)</p>
<p>In beiden Programmen hat der Compiler den Code nicht akzeptiert, Turbo C++ meckerte, weil der (Zeiger-)Datentyp &quot;Kante&quot; in Knoten noch nicht bekannt sei, Dev-C++ hats gar nicht hingekriegt...</p>
<p>Ich weiss im Moment nicht richtig weiter, ich hab zwar schon 7 Jahre Programmiererfahrung in (Turbo) Pascal, programmier C++ aber erst seit etwa 2 Jahren. Gibt es vielleicht eine Moeglichkeit, einen Zeiger auf den struct &quot;Kante&quot; als leeren Typ oder FORWARD (wie in Pascal) vor &quot;Knoten&quot; zu deklarieren, sodass dieser Typ schon bekannt ist?</p>
<p>Waere super nett, wenn ihr mir helfen koenntet <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864943</guid><dc:creator><![CDATA[80iesGuy]]></dc:creator><pubDate>Fri, 05 Mar 2010 19:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 20:13:21 GMT]]></title><description><![CDATA[<p>80iesGuy schrieb:</p>
<blockquote>
<p>Ich weiss im Moment nicht richtig weiter, ich hab zwar schon 7 Jahre Programmiererfahrung in (Turbo) Pascal, programmier C++ aber erst seit etwa 2 Jahren. Gibt es vielleicht eine Moeglichkeit, einen Zeiger auf den struct &quot;Kante&quot; als leeren Typ oder FORWARD (wie in Pascal) vor &quot;Knoten&quot; zu deklarieren, sodass dieser Typ schon bekannt ist?</p>
</blockquote>
<p>Ja, das geht:</p>
<pre><code class="language-cpp">struct Kante;

struct Knoten {
  int id;  // Numerierung des Knotens
  Kante *first;
  Knoten *next;
};

struct Kante {
  int kosten;  // Kosten fuer Verbindung zwischen zwei Knoten
  Knoten *knot;
  Kante *next;
};
</code></pre>
<p>Und dir ist diese (grundlegende) Technik in 2 Jahren C++ noch nie begegnet? Wow.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864953</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 05 Mar 2010 20:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 21:37:28 GMT]]></title><description><![CDATA[<p>Warum struct? c++ lebt von Klassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using std::cout;
using std::endl;
#include &lt;vector&gt;
using std::vector;

class Knoten {
public:
    Knoten(int _id) : id(abs(_id)) {}

    unsigned int id;
};

class Kante {
public:
    Kante(Knoten * _from, Knoten * _to) : from(_from), to(_to) {}

    Knoten * from, * to;
};

class Netz {
public:
    Netz () {}

    void addKante(Kante * kante)
    {
        int id1 = kante-&gt;from-&gt;id;
        int id2 = kante-&gt;to-&gt;id;

        // iter wäre schöner, grad kein Bock :)
        for(unsigned int tmp=0;tmp&lt;knots.size();++tmp)
        {
            if (knots[tmp]-&gt;id == id1)
            {
                // Knoten mit gleicher ID besteht bereits, lösche neuen und biege biege Pointer auf alten Knoten um
                delete kante-&gt;from;
                kante-&gt;from = knots[tmp];
                id1 = -1;
            }
            else if (knots[tmp]-&gt;id == id2)
            {
                // Knoten mit gleicher ID besteht bereits, lösche neuen und biege biege Pointer auf alten Knoten um
                delete kante-&gt;to;
                kante-&gt;to = knots[tmp];
                id2 = -1;
            }
        }

        for(unsigned int tmp=0;tmp&lt;edges.size();++tmp)
        {
            if (edges[tmp]-&gt;to-&gt;id == kante-&gt;to-&gt;id  &amp;&amp;
                edges[tmp]-&gt;from-&gt;id == kante-&gt;from-&gt;id)
            {
                cout &lt;&lt; &quot;Kante doppelt!&quot; &lt;&lt; endl;
                return;
            }
        }

        if (id1!=-1) {
            cout &lt;&lt; &quot;Knoten mit id &quot; &lt;&lt; id1 &lt;&lt; &quot; hinzugefügt&quot; &lt;&lt; endl;
            knots.push_back(kante-&gt;from);
        }
        else if (id2!=-1)
        {
            cout &lt;&lt; &quot;Knoten mit id &quot; &lt;&lt; id2 &lt;&lt; &quot; hinzugefügt&quot; &lt;&lt; endl;
            knots.push_back(kante-&gt;to);
        }

        edges.push_back(kante);
        cout &lt;&lt; &quot;Kante &quot; &lt;&lt; kante-&gt;from-&gt;id &lt;&lt; &quot; -&gt; &quot; &lt;&lt; kante-&gt;to-&gt;id &lt;&lt; &quot; hinzugefügt.&quot; &lt;&lt; endl;

    }

    void out()
    {
        for(unsigned int tmp=0;tmp&lt;knots.size();++tmp)
            std::cout &lt;&lt; &quot;Knoten &quot; &lt;&lt; knots[tmp]-&gt;id &lt;&lt; std::endl;
cout &lt;&lt; endl;
        for(unsigned int tmp=0;tmp&lt;edges.size();++tmp)
            std::cout &lt;&lt; &quot;Edge: &quot; &lt;&lt; edges[tmp]-&gt;from-&gt;id &lt;&lt; &quot; -&gt; &quot; &lt;&lt; edges[tmp]-&gt;to-&gt;id &lt;&lt; std::endl;

    }
private:
    vector&lt;Knoten* &gt; knots;
    vector&lt;Kante* &gt; edges;
};

// main
int main(int , char** )
{
    Netz n;

    n.addKante(new Kante(new Knoten(1),new Knoten(2)));
    n.addKante(new Kante(new Knoten(1),new Knoten(5)));
    n.addKante(new Kante(new Knoten(5),new Knoten(1)));
    n.addKante(new Kante(new Knoten(3),new Knoten(1)));
    n.addKante(new Kante(new Knoten(1),new Knoten(5)));

    n.out();
}
</code></pre>
<p>Kosten und Ausgabe überlass ich dir zum Knobeln <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>my 5cc</p>
<p>EDITED: SyntacticSugar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ausgaben die sagen was passiert.<br />
EDITED: Speicherleck beseitigt (beim adden von Kanten mit existenten KnotenIDs</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864965</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 05 Mar 2010 21:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 20:30:24 GMT]]></title><description><![CDATA[<p>hab bisher mit C++ noch nicht so viel programmiert, nur immer einfache Sachen, da ich lieber mit Turbo Pascal gearbeitet habe.<br />
ich probiers mal aus. Letztens hab ich das so aehnlich schonmal programmiert, hab aber zwei leere geschweifte Klammern geschrieben. Da hat der Compiler gemeckert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864966</guid><dc:creator><![CDATA[80iesGuy]]></dc:creator><pubDate>Fri, 05 Mar 2010 20:30:24 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 20:37:10 GMT]]></title><description><![CDATA[<p>80iesGuy schrieb:</p>
<blockquote>
<p>hab bisher mit C++ noch nicht so viel programmiert, nur immer einfache Sachen, da ich lieber mit Turbo Pascal gearbeitet habe.<br />
ich probiers mal aus. Letztens hab ich das so aehnlich schonmal programmiert, hab aber zwei leere geschweifte Klammern geschrieben. Da hat der Compiler gemeckert...</p>
</blockquote>
<p>Das wäre dann auch eine <em>Definition</em> und keine <em>Deklaration</em> gewesen. Ich weiß nicht, ob man die Begriffe bei Pascal auch so verwendet. Falls dir das nichts sagen sollte, mach dich mal kundig was mit diesen Worten gemeint ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864969</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 05 Mar 2010 20:37:10 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 20:57:28 GMT]]></title><description><![CDATA[<p>Ja, definiert meinte ich <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
C++ ist doch eine gewisse Umgewoehnung. Jedenfalls hab ich jetzt schonmal dank eurer Hilfe das erste Minimalprogramm, um Knoten anzulegen. Ich habe das bisher mit Klassen noch nicht gemacht, weil es von der Aufgabenstellung der Uebungsaufgabe (Uni Studium, Klausur am 11.03.) mit den structs vorgegeben ist. Als Loesung haben wir da die Adjazenz-Matrix schonmal gemacht, die Liste natuerlich wieder nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>So siehts im Moment aus:</p>
<pre><code>#include &lt;conio.h&gt;
#include &lt;iostream.h&gt;

struct Knoten;

struct Kante {
  int kosten;
  Knoten* knot;
  Kante* next;
};

struct Knoten {
  int id;
  Knoten* next;
  Kante* first;
};

Knoten *Anfang, *Aktuell;  // Anfang, um den ersten Knoten zu finden

void NeuerKnoten(Knoten *Root, int nr) {
  Knoten *hilf=new Knoten;
  hilf-&gt;id=nr;
  hilf-&gt;next=NULL;
  hilf-&gt;first=NULL;
  if (Root==NULL) {
    Root=hilf;
    Anfang=Root;
    Aktuell=Root;
  }
  else {
    Aktuell-&gt;next=hilf;
    Aktuell=Aktuell-&gt;next;
  }
}

void PrintKnoten(Knoten *Root) {
  Knoten *hilf=new Knoten;
  hilf=Root;
  while (hilf!=NULL) {
    cout&lt;&lt;hilf-&gt;id&lt;&lt;endl;
    hilf=hilf-&gt;next;
  }
}

int main() {
  clrscr();
  cout&lt;&lt;&quot;Knoten und Kanten&quot;&lt;&lt;endl;
  Anfang=NULL;  Aktuell=NULL;

  NeuerKnoten(Anfang,1);
  NeuerKnoten(Anfang,2);
  NeuerKnoten(Anfang,3);

  PrintKnoten(Anfang);

  getch();
  return 0;
}
</code></pre>
<p>Das mit den * und &amp; ist noch etwas kniffelig, da bin ich von Pascal her immer das ^Symbol gewoehnt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864973</guid><dc:creator><![CDATA[80iesGuy]]></dc:creator><pubDate>Fri, 05 Mar 2010 20:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 21:12:04 GMT]]></title><description><![CDATA[<p>Hab meinen source noch ein bisserl ausgeschmückt, dann sieht man in der Ausgabe besser was er mach <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Was c++ angeht ... da sind mE die &lt;xyz.h&gt; includes verpönt - es gibt für fast alles &lt;xyz&gt;</p>
<p>Wenn die Arbeit sagt: STRUCT dann musst du, aber psst, guck mal:</p>
<pre><code class="language-cpp">struct Net {
public:
Net(int a) : mA(a) {}
int A(){return mA;}
private:
int mA;
};

// main
int main(int , char** )
{
    Net N = Net(4);
    cout &lt;&lt; N.A();
}
</code></pre>
<p>So groß ist der Unterschied nicht ... wo genau der liegt bin ich aber auch zu faul nachzuschaun; ich arbeite lieber mit class als struct.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864978</guid><dc:creator><![CDATA[padreigh]]></dc:creator><pubDate>Fri, 05 Mar 2010 21:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Fri, 05 Mar 2010 21:16:50 GMT]]></title><description><![CDATA[<p>Hallo padreigh,</p>
<p>ich versuch dein Programm gleich mal zu testen. Obs in Turbo C++ laeuft, mal schauen, sonst versuch ich es mit Dev-C++</p>
<p>Kann man eigentlich bei einem Beitrag hier auch Quelltexte etc. als Anhang machen? Weiss nicht, ob es so guenstig ist, immer den gesamten Quelltext in den Beitrag reinzukopieren <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>...hab mich gleich mal registriert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: ich versuch alles erstmal einfach zu machen, Klassen mit Konstruktoren und Destruktoren kenn ich zwar, hab aber noch nicht viel mit gearbeitet. Also in C++ bin ich da noch auf dem Anfaenger-Niveau, bei Turbo Pascal kann ich mich schon guten Gewissens zu den Fortgeschrittenen zaehlen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>In Dev-C++ hab ichs gleich zum Laufen gebracht, aber bei manchen Stellen blick ich doch nich so ganz durch... :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1864980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1864980</guid><dc:creator><![CDATA[80iesGuy]]></dc:creator><pubDate>Fri, 05 Mar 2010 21:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Attributierte Graphen on Sat, 06 Mar 2010 15:32:14 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe das Problem jetzt geloest. Es ist bestimmt noch nicht perfekt, aber fuer die gegebene Aufgabenstellung reichts <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Werde mich auf jeden Fall weiter mit der Sprache C++ beschaeftigen :p</p>
<p>Die Knoten lege ich so an:</p>
<pre><code>void NeuerKnoten(Knoten* Root, int nr) {
  Knoten* hilf=new Knoten;

  hilf-&gt;id=nr;
  hilf-&gt;next=NULL;
  hilf-&gt;first=NULL;

  if (Root==NULL) {
    Root=hilf;
    Anfang=Root;
    Aktuell=Root;
  }
  else {
    Aktuell-&gt;next=hilf;
    Aktuell=Aktuell-&gt;next;
  }
}
</code></pre>
<p>Die Kanten habe ich so realisiert:</p>
<pre><code>void NeueKante(int start, int ziel, int betrag) {
  // Adressen des Start- und Zielknotens ermitteln und speichern
  Knoten* k1=Anfang;
  while ((k1!=NULL) &amp;&amp; (k1-&gt;id&lt;start)) k1=k1-&gt;next;
  Knoten* k2=Anfang;
  while ((k2!=NULL) &amp;&amp; (k2-&gt;id&lt;ziel)) k2=k2-&gt;next;

  // Neue Kante anlegen
  if ((k1!=NULL) &amp;&amp; (k2!=NULL)) {
    Kante* hilf=new Kante;

    hilf-&gt;kosten=betrag;
    hilf-&gt;knot=NULL;
    hilf-&gt;next=NULL;

    if (k1-&gt;first==NULL) {
      k1-&gt;first=hilf;
      hilf-&gt;knot=k2;
    }  // if
    else {
      Kante* letzter=k1-&gt;first;
      while (letzter-&gt;next!=NULL) letzter=letzter-&gt;next;
      letzter-&gt;next=hilf;
      hilf-&gt;knot=k2;
    }  // else

  }  // if (k1 &amp;&amp; k2)
}
</code></pre>
<p>Die Ausgabe logischerweise auch etwas anders:</p>
<pre><code>void PrintNetz(Knoten *Root) {
  Knoten *kn=Root;
  Kante *edg;

  while (kn!=NULL) {

    edg=kn-&gt;first;

    while (edg!=NULL) {
      cout&lt;&lt;&quot;Von &quot;&lt;&lt;kn-&gt;id&lt;&lt;&quot; nach &quot;&lt;&lt;edg-&gt;knot-&gt;id;
      cout&lt;&lt;&quot; kostet: &quot;&lt;&lt;edg-&gt;kosten&lt;&lt;endl;
      edg=edg-&gt;next;
    }

    kn=kn-&gt;next;
  }
}
</code></pre>
<p>Vielen Dank fuer die Ratschlaege und Hinweise. Wie gesagt, es sollte halt was einfaches sein, nix kompliziertes mit Klassen und so <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Eine Umsetzung mit Klassen werde ich aber zu Trainingszwecken auch machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Der Code bietet auch noch reichlich Optimierungspotential. Eine gescheite Loeschroutine, die den Speicher wieder frei gibt, fehlt auch noch, das krieg ich hin.<br />
Fuer dieses Forum hier auf jeden Fall <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865157</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865157</guid><dc:creator><![CDATA[80iesGuy]]></dc:creator><pubDate>Sat, 06 Mar 2010 15:32:14 GMT</pubDate></item></channel></rss>