<?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[Problem mit &amp;quot;Breitensuche&amp;quot;]]></title><description><![CDATA[<p>Hi!</p>
<p>Zur Zeit beschäftige ich mich mit dem Algorithmus für die sog. Breitensuche.<br />
Mit der Breitensuche soll der kürzesten Weg von einem vordefinierten Startpunkt zu einem Zielpunkt gefunden werden. Auf dem Weg dort hin gibt es Hindernisse, die durch eine Bitmap-Datei eingelesen werden.</p>
<p>Beispiel eines solchen 2D-Umgebung mit Hindernissen: <a href="http://www.linknichtmehraktuell.de" rel="nofollow">LINK</a></p>
<p>Der gefundene Weg zum Ziel wird dann in ein neues Bmp-Bild eingezeichent. Nur leider klappt mein Algorithmus noch nicht ganz. Dieses Bild liefert mein Code, wenn ich einen Pfad von der linken oberen Ecke in die rechte untere Ecke suche: <a href="http://www.linknichtmehraktuell.de" rel="nofollow">LINK</a></p>
<p>Leider kann ich meinen Fehler im Code nicht finden... Kann mir da eventuell jemand helfen??</p>
<p>Den Suchalgorithmus habe ich folgendermaßen versucht umzusetzen:</p>
<p>1. Füge Startzelle in Queue ein (push)<br />
2. Markiere die Startzelle<br />
3. Nehme die erste Zelle aus der Queue (pop)<br />
4. Falls die Zelle die Zielzelle ist -&gt; Weg gefunden<br />
5. Für jede Nachbarzelle, die noch nicht markiert ist, setze die aktuelle Zelle als Vorgänger und nehme sie in die Queue auf<br />
6. Springe zu Schritt 3, bis der Algorithmus terminiert oder die Queue leer ist.</p>
<p>Da der Quellcode etwas länger ist, hab ich hier nen Link zu meiner &quot;main.cpp&quot; erstellt: <a href="http://www.linknichtmehraktuell.de" rel="nofollow">main.cpp</a></p>
<p>Ich hoffe mal mir kann bei diesem speziellen Thema jemand helfen!</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184847/problem-mit-quot-breitensuche-quot</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 01:18:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184847.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Jun 2007 18:30:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Thu, 17 Jul 2008 17:18:08 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Zur Zeit beschäftige ich mich mit dem Algorithmus für die sog. Breitensuche.<br />
Mit der Breitensuche soll der kürzesten Weg von einem vordefinierten Startpunkt zu einem Zielpunkt gefunden werden. Auf dem Weg dort hin gibt es Hindernisse, die durch eine Bitmap-Datei eingelesen werden.</p>
<p>Beispiel eines solchen 2D-Umgebung mit Hindernissen: <a href="http://www.linknichtmehraktuell.de" rel="nofollow">LINK</a></p>
<p>Der gefundene Weg zum Ziel wird dann in ein neues Bmp-Bild eingezeichent. Nur leider klappt mein Algorithmus noch nicht ganz. Dieses Bild liefert mein Code, wenn ich einen Pfad von der linken oberen Ecke in die rechte untere Ecke suche: <a href="http://www.linknichtmehraktuell.de" rel="nofollow">LINK</a></p>
<p>Leider kann ich meinen Fehler im Code nicht finden... Kann mir da eventuell jemand helfen??</p>
<p>Den Suchalgorithmus habe ich folgendermaßen versucht umzusetzen:</p>
<p>1. Füge Startzelle in Queue ein (push)<br />
2. Markiere die Startzelle<br />
3. Nehme die erste Zelle aus der Queue (pop)<br />
4. Falls die Zelle die Zielzelle ist -&gt; Weg gefunden<br />
5. Für jede Nachbarzelle, die noch nicht markiert ist, setze die aktuelle Zelle als Vorgänger und nehme sie in die Queue auf<br />
6. Springe zu Schritt 3, bis der Algorithmus terminiert oder die Queue leer ist.</p>
<p>Da der Quellcode etwas länger ist, hab ich hier nen Link zu meiner &quot;main.cpp&quot; erstellt: <a href="http://www.linknichtmehraktuell.de" rel="nofollow">main.cpp</a></p>
<p>Ich hoffe mal mir kann bei diesem speziellen Thema jemand helfen!</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309338</guid><dc:creator><![CDATA[Shakesbier]]></dc:creator><pubDate>Thu, 17 Jul 2008 17:18:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Tue, 19 Jun 2007 18:44:36 GMT]]></title><description><![CDATA[<p><div class="plugin-markdown"><input type="checkbox" id="checkbox5048" checked="true" /><label for="checkbox5048">indizierst. Naja, und dass Breitensuche hier nicht wirklich ein geeigneter Algorithmus ist, aber das wirst du schon noch merken.</label></div></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309348</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 19 Jun 2007 18:44:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Tue, 19 Jun 2007 18:50:03 GMT]]></title><description><![CDATA[<p>Du benutzt den falschen Algorithmus. <a href="http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra" rel="nofollow">http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309351</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Tue, 19 Jun 2007 18:50:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Tue, 19 Jun 2007 18:51:33 GMT]]></title><description><![CDATA[<p>Bashar schrieb:</p>
<blockquote>
<p>Naja, und dass Breitensuche hier nicht wirklich ein geeigneter Algorithmus ist, aber das wirst du schon noch merken.</p>
</blockquote>
<p>Vielleicht für Kurzstrecken-Teleporter <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1309355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309355</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Tue, 19 Jun 2007 18:51:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Tue, 19 Jun 2007 19:01:18 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Du benutzt den falschen Algorithmus. <a href="http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra" rel="nofollow">http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra</a></p>
</blockquote>
<p>Auch falsch <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 />
<a href="http://de.wikipedia.org/wiki/A*" rel="nofollow">http://de.wikipedia.org/wiki/A*</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309362</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Tue, 19 Jun 2007 19:01:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Tue, 19 Jun 2007 19:05:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Du benutzt den falschen Algorithmus. <a href="http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra" rel="nofollow">http://de.wikipedia.org/wiki/Algorithmus_von_Dijkstra</a></p>
</blockquote>
<p>Nimm lieber A* - Suche. Als Heuristik verwendest Du die &quot;Manhattan-Norm&quot; / &quot;Spaltensummennorm&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309366</guid><dc:creator><![CDATA[Turing]]></dc:creator><pubDate>Tue, 19 Jun 2007 19:05:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Tue, 19 Jun 2007 19:54:41 GMT]]></title><description><![CDATA[<p>Dijkstras Algorithmus funktioniert, und ist einem offensichtlichem Anfänger wohl erst einmal zugänglicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309407</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Tue, 19 Jun 2007 19:54:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 12:25:01 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Dijkstras Algorithmus funktioniert, und ist einem offensichtlichem Anfänger wohl erst einmal zugänglicher.</p>
</blockquote>
<p>Breitensuche funktioniert auch und ist ja wohl vor Dijkstra der erste Schritt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309868</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 20 Jun 2007 12:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 14:47:08 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>finix schrieb:</p>
<blockquote>
<p>Dijkstras Algorithmus funktioniert, und ist einem offensichtlichem Anfänger wohl erst einmal zugänglicher.</p>
</blockquote>
<p>Breitensuche funktioniert auch und ist ja wohl vor Dijkstra der erste Schritt.</p>
</blockquote>
<p>Das möchte ich sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1309990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1309990</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 20 Jun 2007 14:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 15:21:06 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>finix schrieb:</p>
<blockquote>
<p>Dijkstras Algorithmus funktioniert, und ist einem offensichtlichem Anfänger wohl erst einmal zugänglicher.</p>
</blockquote>
<p>Breitensuche funktioniert auch und ist ja wohl vor Dijkstra der erste Schritt.</p>
</blockquote>
<p>Das möchte ich sehen.</p>
</blockquote>
<p>Hmm, ich habe wohl das Wörtchen &quot;kürzesten&quot; überlesen. Dann funktioniert Breitensuche natürlich nur noch in Spezialfällen (alle Kanten haben dieselbe Länge). Im einfachen Fall, in dem man durch ein Pixel-Array sucht, funktioniert sie natürlich aber trotzdem, das sollte offensichtlich sein, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310015</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 20 Jun 2007 15:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 15:49:55 GMT]]></title><description><![CDATA[<p>Das ist für mich ehrlich gesagt nicht offensichtlich. Mir ist nicht ganz klar wie da ein Pfad herauskommen soll (außer natürlich in einem speziellen Fall <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="😉"
    /> ), daher wäre ich dir für eine kurze Erläuterung sehr dankbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310041</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Wed, 20 Jun 2007 15:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 16:01:43 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Das ist für mich ehrlich gesagt nicht offensichtlich. Mir ist nicht ganz klar wie da ein Pfad herauskommen soll (außer natürlich in einem speziellen Fall <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="😉"
    /> ), daher wäre ich dir für eine kurze Erläuterung sehr dankbar.</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/Breitensuche" rel="nofollow">http://de.wikipedia.org/wiki/Breitensuche</a></p>
<p>--&gt; Breitensuche liefert kürzeste Weg von einem Knoten s zu allen anderen Knoten, sofern man keine Kantengewichte hat (bzw. alle gleich sind). Legt man hier also ein entsprechendes Grid rein, würd auch Breitensuche ohne weiteres funktionieren.</p>
<p>Der &quot;Fehler&quot; sieht eher so aus als wären im Graphen die Hindernisse garnicht berücksichtigt worden..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310050</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310050</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Wed, 20 Jun 2007 16:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 16:04:50 GMT]]></title><description><![CDATA[<p>finix schrieb:</p>
<blockquote>
<p>Das ist für mich ehrlich gesagt nicht offensichtlich. Mir ist nicht ganz klar wie da ein Pfad herauskommen soll (außer natürlich in einem speziellen Fall <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="😉"
    /> ), daher wäre ich dir für eine kurze Erläuterung sehr dankbar.</p>
</blockquote>
<p>Na die Breitensuche liefert Dir doch auf Wunsch einen GAG und einen Endknoten. Dann musst Du Dich an den Kanten vom Endknoten aus einfach zur Wurzel hochhangeln und schon hast Du Deinen Pfad vom Ziel zum Start (welcher der kürzeste ist).</p>
<p>Pseudocode für die Breitensuche mit Endknoten und GAG:</p>
<pre><code>Funktion Breitensuche(start, ende)
  W: leere Warteschlange
  B: leerer Baum
  Füge start W hinzu
  Füge start B hinzu
  Wiederhole
    Entnimm v aus W
    markiere v
    Wenn v = ende dann gib B zurück
    Für alle unmarkierten u in Adjazenzknoten(v)
      Füge u W hinzu
      Füge (v, u) B hinzu
    Wenn W leer, dann gib nix zurück
</code></pre>
<p>Sollte so klappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310055</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 20 Jun 2007 16:04:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 17:05:25 GMT]]></title><description><![CDATA[<p>life schrieb:</p>
<blockquote>
<p>--&gt; Breitensuche liefert kürzeste Weg von einem Knoten s zu allen anderen Knoten, sofern man keine Kantengewichte hat (bzw. alle gleich sind). Legt man hier also ein entsprechendes Grid rein, würd auch Breitensuche ohne weiteres funktionieren.</p>
<p>Der &quot;Fehler&quot; sieht eher so aus als wären im Graphen die Hindernisse garnicht berücksichtigt worden..</p>
</blockquote>
<p>Hätte ich vielleicht am Anfang dazu sagen sollen. Genauso ist es nämlich, dass ich mich durch einen Raum mit einer bestimmten Rastergröße bewege, also in Grid ist vorhanden!</p>
<p>An einen anderen Algorithmus wie ja hier auch schon empfohlen wurde, hatte ich auch schon gedacht, aber da ich jetzt mit der Breitensuche angefangen habe, würde ich es auch gerne ersteinmal zum laufen bringen... Danach mache ich mir definitiv mal ein paar Gedanken zur Optimierung!</p>
<p>Nur warum die Hindernisse allen Anschein nach bei mir noch nicht berücksichtigt werden, konnte ich immer noch nicht raus finden...</p>
<p>@ Konrad Rudolph: Genauso habe ich es ja auch versucht (siehe meinen Pseudocode im ersten Beitrag). Und ich denke zumindest, dass ich das in meinem Code auch umgesetzt habe...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310111</guid><dc:creator><![CDATA[Shakesbier]]></dc:creator><pubDate>Wed, 20 Jun 2007 17:05:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Wed, 20 Jun 2007 17:36:50 GMT]]></title><description><![CDATA[<p>Shakesbier schrieb:</p>
<blockquote>
<p>Nur warum die Hindernisse allen Anschein nach bei mir noch nicht berücksichtigt werden, konnte ich immer noch nicht raus finden...</p>
</blockquote>
<p>Bist du der Sache mit der Reihenfolge der Indizes mal nachgegangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310132</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 20 Jun 2007 17:36:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Breitensuche&amp;quot; on Thu, 21 Jun 2007 17:47:33 GMT]]></title><description><![CDATA[<p>Nach stundenlangem debuggen habe ich den Fehler endlich gefunden...</p>
<pre><code class="language-cpp">// In dieser Tabelle steht die Reihenfolge in der die Umliegenden Felder abgearbeitet werden sollen

const int DirTable[8][2] = { 
{  0, -1},      // oben
{  1,  0},      // rechts
{  0,  1},      // unten
{ -1, -1},      // links         FEHLER: Hier muss natürlich {-1, 0} hin!!
{  1, -1},      // rechts-oben
{  1,  1},      // rechts-unten
{ -1,  1},      // links-unten
{ -1, -1} };    // links-oben
</code></pre>
<p>An der Stelle habe ich natürlich erst am Schluss gesucht.</p>
<p>Danke nochmal für die Hinweise zu effizienteren Algorithmen. Werde ich mir die nächsten Tage mal ansehn!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310930</guid><dc:creator><![CDATA[Shakesbier]]></dc:creator><pubDate>Thu, 21 Jun 2007 17:47:33 GMT</pubDate></item></channel></rss>