<?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[Ablauf Algorithmus]]></title><description><![CDATA[<p>Hallo,<br />
ich muss einen Graphen-Algorithmus implementieren, der verinfacht folgendes beinhaltet:</p>
<ol>
<li>Initialisierung aller Variablen</li>
<li>Suche einen Knoten x, der Bed. 1 erfüllt. Wenn es keinen gibt, ist der Alg. fertig.</li>
<li>Suche Nachbarn y dieses Knoten, der Bed. 2 erfüllt. Falls es keinen gibt, goto 2.<br />
4)Falls y Bed. 3 erfüllt, führe Funktion grow() aus und gehe danach zu 3.</li>
</ol>
<p>Das ist stark vereinfacht und die Bedingungen sollen nur andeuten, dass dort mit if irgendwelche mathematischen Ausdrücke geprüft werden.</p>
<p>Mein Problem ist, ich weiss nicht wirklich, wie ich dieses ganze Hin und Her zwischen den Schritten hinbekomme. Ich hatte erst gedacht, am Ende eines der Schritte, die ich jeweils als eigene Funktion schreibe, die Funktion auszurufen, die danach kommen soll (also am ende der Funktion, die Schritt 4 bescreibt, dann wieder die Funktion für Schritt 3 aufzurufen). Aber dann springt man ja nach Ausführen einer Funktion wieder in die zurück, aus der man die neue aufgerufen hat, und das scheint ja nicht ganz das zu sein, was man will.</p>
<p>Das Ganze ist sehr schwer zu erklären, ich hoffe, jemand versteht, was ich meine, sonst versuche ich, es nochmal besser zu erklären.</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250729/ablauf-algorithmus</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 22:32:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250729.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Sep 2009 08:38:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ablauf Algorithmus on Wed, 23 Sep 2009 08:38:50 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich muss einen Graphen-Algorithmus implementieren, der verinfacht folgendes beinhaltet:</p>
<ol>
<li>Initialisierung aller Variablen</li>
<li>Suche einen Knoten x, der Bed. 1 erfüllt. Wenn es keinen gibt, ist der Alg. fertig.</li>
<li>Suche Nachbarn y dieses Knoten, der Bed. 2 erfüllt. Falls es keinen gibt, goto 2.<br />
4)Falls y Bed. 3 erfüllt, führe Funktion grow() aus und gehe danach zu 3.</li>
</ol>
<p>Das ist stark vereinfacht und die Bedingungen sollen nur andeuten, dass dort mit if irgendwelche mathematischen Ausdrücke geprüft werden.</p>
<p>Mein Problem ist, ich weiss nicht wirklich, wie ich dieses ganze Hin und Her zwischen den Schritten hinbekomme. Ich hatte erst gedacht, am Ende eines der Schritte, die ich jeweils als eigene Funktion schreibe, die Funktion auszurufen, die danach kommen soll (also am ende der Funktion, die Schritt 4 bescreibt, dann wieder die Funktion für Schritt 3 aufzurufen). Aber dann springt man ja nach Ausführen einer Funktion wieder in die zurück, aus der man die neue aufgerufen hat, und das scheint ja nicht ganz das zu sein, was man will.</p>
<p>Das Ganze ist sehr schwer zu erklären, ich hoffe, jemand versteht, was ich meine, sonst versuche ich, es nochmal besser zu erklären.</p>
<p>Danke schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782911</guid><dc:creator><![CDATA[alx3400]]></dc:creator><pubDate>Wed, 23 Sep 2009 08:38:50 GMT</pubDate></item><item><title><![CDATA[Reply to Ablauf Algorithmus on Wed, 23 Sep 2009 08:49:53 GMT]]></title><description><![CDATA[<p>Lässt sich das nicht einfach mit Hilfe verschachtelter Schleifen realisieren? Hängt allerdings davon ab, was grow() machen soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782922</guid><dc:creator><![CDATA[Dasd]]></dc:creator><pubDate>Wed, 23 Sep 2009 08:49:53 GMT</pubDate></item><item><title><![CDATA[Reply to Ablauf Algorithmus on Wed, 23 Sep 2009 08:57:13 GMT]]></title><description><![CDATA[<p>Eigentlich ist der Ablauf ja schon ganz gut beschrieben. Am besten, du zeigst mal, was du bislang hast, und dann sehen wir weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782925</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782925</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 23 Sep 2009 08:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to Ablauf Algorithmus on Wed, 23 Sep 2009 09:13:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void findy(int x){
	for(int i=0;i&lt;graph[x].degree;++i){
		y=graph[x].neighbours[i];
		if( outofforest(y) or (outer(y) and roh[y]!=roh[x]) ){
			if (outofforest(y))
				grow(x,y);
			else if (vdisjoint(x,y))
				augment(x,y);
			     else
				shrink(x,y);
		}

	}
	scanned[x]=true;
	findx();
}

int findx(){
	for(int i=0;i&lt;n;++i){
		if(outer(i)){
			if(!scanned[i]){

				findy(i);

				break;
			}
			else
				continue;
		}
		else
			continue;
	}
	return -1;
}
</code></pre>
<p>also findx() wird aus main() aufgerufen und soll einen Knoten x finden, der &quot;outer&quot; ist (wird durch die Funktion outer() gecheckt) und &quot;nicht scanned&quot;.Gibt es den nicht, wird -1 zurückgegeben. Falls er einen findet, wird findy()aufgerufen, die einen Nachbarn y von x sucht. Je nachdem welche Eigenschaften y hat, werden die Funktionen &quot;grow&quot;,&quot;shrink&quot; oder &quot;augment&quot; aufgerufen. Wurden grow oder shrink aufgerufen, suche ich mir danach nur ein neues y, wenn augment aufgerufen wurde, muss ich &quot;ganz vorne&quot; anfangen und auch ein neues x suchen.</p>
<p>Mein Problem ist irgendwie diese Verschachtelung. Angenommen, augment wird ausgeführt, dann müsste am ende von augment wieder ein Aufruf der Funktion findx stehen. Ich würde aber lieber von da aus wiede an die Stelle zurück, wo ich zu Anfang findx aufgerufen hab, nur mit den veränderten Werten des Graphen.</p>
<p>Ich weiss immer noch nicht, ob man auch nur ansatzweise verstehen kann, was ich meine.</p>
<p>EDIT: Nochmal zur Erklärung. Ich hätte vielleicht gern in main(), an der Stelle, an der findx() aufgerufen, sowas wie nen Rückkehrpunkt, an den ich wieder springen kann, wenn die Funktion augment aufgerufen wurde und ihren Dienst getan hat. Genauso hätte ich gern einen Punkt in findx(), direkt vor dem Aufruf von findy(), an den ich zurückspringe, wenn shrink oder grow aufgerufen wurde.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782934</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782934</guid><dc:creator><![CDATA[alx3400]]></dc:creator><pubDate>Wed, 23 Sep 2009 09:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to Ablauf Algorithmus on Wed, 23 Sep 2009 11:04:22 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int findy(int x){
	for(int i=0;i&lt;graph[x].degree;++i){
		y=graph[x].neighbours[i];
		if( outofforest(y) or (outer(y) and roh[y]!=roh[x]) )
			return i;
	}
	scanned[x]=true;
	return -1;
}

int findx(){
	for(int i=0;i&lt;n;++i){
		if(outer(i)){
			if(!scanned[i])
				return i;
			else
				continue;
		}
		else
			continue;
	}
	return -1;
}

int main(){

while(findx()!=-1){
		x=findx();
		while(findy(x)!=-1){
			y=findy(x);
			if (outofforest(y)){
				grow(x,y);
				continue;
			}
			else{
				if(vdisjoint(x,y)){
					augment(x,y);
					break;
				}
				else{
					shrink(x,y);
					continue;
				}
			}
		}
}
//Hier kommt die Ausgabe des Ergebnisses hin
return 0;
}
</code></pre>
<p>Bin das Ganze jetzt mal etwas anders angegangen. Werde erstmal versuchen ob es so geht und sich meine eigentlich Frage damit erledigt hat.<br />
Ich hoffe, ich habe break und continue richtig eingesetzt. Jedenfalls müsste doch, nachdem grow oder shrink aufgerufen wurde als nächstes wieder geprüft werden, ob findy(x) -1 ergibt und es damit keinen in Frage kommenden Nachbarn von x mehr gibt. Falls augment aufgerufen wird, wird die while-Schleife, die in Zeile 29 beginnt, verlassen und es wird erneut die Bedingung der while-Schleife aus Zeile 27 gecheckt und mit einem neuem x, falls vorhanden, weitergearbeitet.</p>
<p>Vielleicht kann mir ja jemand sagen, ob mein Gedankengang so richtig ist.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1782991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1782991</guid><dc:creator><![CDATA[alx3400]]></dc:creator><pubDate>Wed, 23 Sep 2009 11:04:22 GMT</pubDate></item><item><title><![CDATA[Reply to Ablauf Algorithmus on Wed, 23 Sep 2009 11:29:06 GMT]]></title><description><![CDATA[<p>Hab jetzt nicht die Zeit, mir das im Detail anzusehen, aber wenn du wissen willst, ob der Ablauf in Ordnung ist, dann gehe schrittweise mit dem Debugger durch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1783009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1783009</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 23 Sep 2009 11:29:06 GMT</pubDate></item></channel></rss>