<?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[Wegfindung?]]></title><description><![CDATA[<p>Folgendes Problem:<br />
Jemand ist auf einer Karte, die so aussieht:</p>
<pre><code>000000000
000111000
011101010
001011010
111111111
101100100
000000000
</code></pre>
<p>0 = frei 1 = wand<br />
Jetzt möchte ich herausfinden, ob er eingesperrt ist (also ob man von seiner Position den Rand der Karte erreichen kann). Das kann er in diesem Beispiel auf allen 0 Feldern außer<br />
000000000<br />
000111000<br />
0111<strong>0</strong>1010<br />
001<strong>0</strong>11010<br />
111111111<br />
101100100<br />
000000000</p>
<p>Ich suche einen Algorithmus, der herausfindet, ob es einen Weg zum Rand gibt oder nicht. Kann mir da wer helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129323/wegfindung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 04:55:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129323.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Dec 2005 17:49:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wegfindung? on Mon, 12 Dec 2005 17:49:20 GMT]]></title><description><![CDATA[<p>Folgendes Problem:<br />
Jemand ist auf einer Karte, die so aussieht:</p>
<pre><code>000000000
000111000
011101010
001011010
111111111
101100100
000000000
</code></pre>
<p>0 = frei 1 = wand<br />
Jetzt möchte ich herausfinden, ob er eingesperrt ist (also ob man von seiner Position den Rand der Karte erreichen kann). Das kann er in diesem Beispiel auf allen 0 Feldern außer<br />
000000000<br />
000111000<br />
0111<strong>0</strong>1010<br />
001<strong>0</strong>11010<br />
111111111<br />
101100100<br />
000000000</p>
<p>Ich suche einen Algorithmus, der herausfindet, ob es einen Weg zum Rand gibt oder nicht. Kann mir da wer helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940431</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940431</guid><dc:creator><![CDATA[snOOfy]]></dc:creator><pubDate>Mon, 12 Dec 2005 17:49:20 GMT</pubDate></item><item><title><![CDATA[Reply to Wegfindung? on Mon, 12 Dec 2005 17:55:16 GMT]]></title><description><![CDATA[<p>rekursiv von deiner Position aus alle Nachbarn überprüfen, ob sie (a) schon besucht wurden, (b) eine Wand enthalten oder (c) am Rand liegen (im Fall a und b geht's dort nicht weiter, im Fall c bist du fertig) - wenn du einen gefunden hast, gehst du einen Schritt weiter und startest von vorne.</p>
<p>(am Ende tritt entweder Fall (c) ein (-&gt; Ziel erreicht) oder du stehst am Ausgangspunkt und stellst fest, daß du alle Nachbarn schon überprüft hast (-&gt; Sackgasse))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940439</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 12 Dec 2005 17:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wegfindung? on Mon, 12 Dec 2005 18:22:05 GMT]]></title><description><![CDATA[<p>Ja so ungefähr hab ich mir das auch vorgestellt, aber Rekursion ist nicht so meine Stärke...<br />
Ich komm da immer total durcheinander, weil ich es mir nicht richtig vorstellen kann <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Mein Ansatz:</p>
<pre><code class="language-cpp">bool WegZumRand(int x, int y)
    {
        if (x==0 || x==iBreite || y == 0 || y == iHoehe)
            return true;
        else    
            return (WegZumRand(x, y-1) || WegZumRand(x, y+1) || WegZumRand(x-1, y) || WegZumRand(x+1, y));
    }
</code></pre>
<p>Aber so ist das ja wohl noch nicht richtig, es fehlt das mit der Wand und das mit dem schon besucht...<br />
Kann mir wer sagen, wie ich das machen muss?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940471</guid><dc:creator><![CDATA[snOOfy]]></dc:creator><pubDate>Mon, 12 Dec 2005 18:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Wegfindung? on Mon, 12 Dec 2005 19:39:24 GMT]]></title><description><![CDATA[<p>So direkt kann ich dir nicht helfen, weil ich ehrlich gesagt grad zu faul bin mich in das Problem einzuarbeiten ;). Allerdings könntest du dir mal den A*-Algorithmus und ein paar Implementationen anschauen. Ist für diesen Fall wohl etwas Overkill, aber falls du mal vorhast eine &quot;Wegfindungs-Routine&quot; auf diese Karte loszulassen, dann ist wohl A* die Lösung deiner Wahl ^^.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940570</guid><dc:creator><![CDATA[cin]]></dc:creator><pubDate>Mon, 12 Dec 2005 19:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to Wegfindung? on Mon, 12 Dec 2005 19:50:01 GMT]]></title><description><![CDATA[<p>Du kannst auch einfach den Bereich &quot;fluten&quot;. Mach Dir ne Liste von Positionen, nennen wir sie die Randgebiete. Am Anfang tuste da nur das Feld rein auf dem Du stehst.</p>
<p>Dann ne Schleife: Solange die Liste mit den Randknoten noch nicht leer nimm den ersten Knoten raus. Schaue Dir alle Nachbarn dieses Knotens an und prüfe, ob man sie betreten kann, ist das der Fall, so prüfe ob Du sie vielleicht schon zuvor besucht hast. Wenn nicht füge den neuen Knoten in die Randliste ein. Der Rand enthält also immer die Felder, von denen aus Du noch nicht weiter gesucht hast.</p>
<p>Sobald Du den Rand erreichst kannste aufhören. Anderenfalls wird die Liste irgendwann leer werden.</p>
<p>MfG Jester</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940586</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Mon, 12 Dec 2005 19:50:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wegfindung? on Tue, 13 Dec 2005 07:36:37 GMT]]></title><description><![CDATA[<p>snOOfy schrieb:</p>
<blockquote>
<p>Aber so ist das ja wohl noch nicht richtig, es fehlt das mit der Wand und das mit dem schon besucht...</p>
</blockquote>
<p>Auf Wand kannst du überprüfen, indem du &quot;Karte[x][y]&gt;=1&quot; abfragst, für schonmal besucht empehle ich dir, vor dem Rekursionsschritt eine 2 in die Karte einzutragen (1 steht schon für Wand):</p>
<pre><code class="language-cpp">bool WegZumRand(int x, int y)
{
  if (x==0 || x==iBreite || y == 0 || y == iHoehe)
    return true;
  else if(Karte[x][y]&gt;=1)
    return false;
  Karte[x][y]=2;//Position als &quot;besucht&quot; markieren
  return (WegZumRand(x, y-1) || WegZumRand(x, y+1) || WegZumRand(x-1, y) || WegZumRand(x+1, y));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940762</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 13 Dec 2005 07:36:37 GMT</pubDate></item></channel></rss>