<?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[2sat-korrektur: Programm schmiert ab]]></title><description><![CDATA[<p>Hallo cpp-Forum,</p>
<p>ich habe ein Problemchen ;-). Ich habe hierr einen fremden Code, den ich berichtigen will.<br />
Ich habe bereits die Fehlerquelle gefunden, jedoch wundere ich mich, dass es nicht funktioniert.<br />
Seht selbst:</p>
<p>Der Fehler liegt hier (weil er nur bis dahin kommt; Zeile 188):</p>
<pre><code class="language-cpp">Graph *temp = new Graph(2*variablen);
</code></pre>
<p>Hier der ganze Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;

// zusaetzliche libs
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;map&gt;
#include &lt;vector&gt;

using namespace std;

///////////////////////////////////////////////
//map wird verwendet, damit schneller nach Elementen gesucht werden kann

typedef map&lt;long,long&gt; Komp;

class Adjazenzkante {

	public:
	Adjazenzkante(long ziel);
	~Adjazenzkante();

	void setzeNaechste(Adjazenzkante *a);

        Adjazenzkante *gebeNaechste(void);

	long gebeZiel(void);

	private:
	long ziel;
	Adjazenzkante *naechste;

};

typedef Adjazenzkante* p_Adjazenzkante;
typedef p_Adjazenzkante* pp_Adjazenzkante;

Adjazenzkante::Adjazenzkante(long ziel) {
	this-&gt;ziel = ziel;
	this-&gt;naechste = 0;

}

Adjazenzkante::~Adjazenzkante() {
	if (naechste != 0) delete naechste;
}

void Adjazenzkante::setzeNaechste(Adjazenzkante *a) {
	naechste = a;
}

Adjazenzkante *Adjazenzkante::gebeNaechste(){
	return naechste;
}

long Adjazenzkante::gebeZiel(void) {
	return ziel;
}

//////////////////////// 

class Graph{

	public:
	Graph(long Knoten);
	~Graph();

	void entfernen(long k);
	bool neueKante (long start, long ziel);
//	Graph *gebeUngerichteten Graphen(); // f1
	Graph *gebeUngerichteten;
	Graph *gebeAntiGraph();	
	Adjazenzkante **gebeKanten();
	long gebeKnotenanzahl();

	//Die Algorithmen
	void scc(vector&lt;Komp&gt; &amp;Komponenten);
//	void gerichteterKreis(vector&lt;Komp&gt; Komponenten, bool +kreis);
	void gerichteterKreis(vector&lt;Komp&gt; Komponenten, bool *kreis);
	bool* erfuellendeBelegung();

	private:
	Adjazenzkante **Kanten;
	long Knotenanzahl;
	void besuche1(long a, long labell[], long relable[], bool besuchte[],
	long* zaehler, Komp &amp;Komponente1);
	void besuche2 (long a, long label[], long relabel[], bool besuchte[],
	Adjazenzkante **Knoten, Komp &amp;Komponente);

};

typedef Graph* p_Graph;

void Graph::entfernen (long k){
	Kanten[k]=0;
}

Graph::Graph(long Knoten){
	Knotenanzahl=Knoten;
	Kanten = new p_Adjazenzkante[Knotenanzahl];
	for(long i = 0; 1&lt;Knoten; i++){
		Kanten[i] = 0;
	}
}

Graph::~Graph() {
	for (long i=0; i&lt;Knotenanzahl; i++){
		if(Kanten[i]!= NULL) delete Kanten[i]; // f3
	}
	delete[] Kanten;
}

bool Graph::neueKante(long start, long ziel){
	p_Adjazenzkante laeufer;
	p_Adjazenzkante davor;
	laeufer = Kanten[start];
	if (laeufer==NULL){
		Kanten[start] = new Adjazenzkante(ziel);
		return true;
	}

	while(laeufer !=NULL){
		davor = laeufer;
		laeufer= laeufer-&gt;gebeNaechste();
	}

	davor-&gt; setzeNaechste(new Adjazenzkante(ziel));
	return true;
}

pp_Adjazenzkante Graph::gebeKanten(){
	return Kanten;
}

p_Graph Graph::gebeAntiGraph(){
	p_Graph temp = new Graph(Knotenanzahl);
	for(int i=0; i&lt;Knotenanzahl; i++) {
		p_Adjazenzkante aktKante = Kanten[i];
		while(aktKante !=NULL){
			temp-&gt;neueKante(aktKante-&gt;gebeZiel(),i);
			aktKante=aktKante-&gt;gebeNaechste();
		}
	}
	return temp;
}

long Graph::gebeKnotenanzahl(){ // f4 zusammengeschrieben
	return Knotenanzahl;
}

Graph *parseDatei (string dateiname){
	long variablen, kanten;
	char startnegiert, zielnegiert, x;
	long start, ziel;
	char negiert;
	ifstream datei;

	datei.open(dateiname.c_str(), ifstream::in);
	if (datei==0) {
		cerr&lt;&lt;&quot;Datei nicht gefunden&quot;&lt;&lt; endl;
		return 0;
    	}	

	datei &gt;&gt; variablen;
	Graph *temp = new Graph(2*variablen);
	while ( !datei.eof() ) { 
		datei &gt;&gt; startnegiert;  // f5 falschgeschrieben
 		datei &gt;&gt; x;                     // x einlesen 
		datei &gt;&gt; start; 
		datei &gt;&gt; zielnegiert; 
		datei &gt;&gt; x;                    //x einlesen 
		datei &gt;&gt; ziel;
		if (startnegiert =='+' &amp;&amp; zielnegiert == '+') {  // nicht `` sondern ''
			temp-&gt;neueKante(start+variablen,ziel);
			temp-&gt;neueKante(ziel+variablen, start); 
			continue;
		}	
		if(startnegiert == '+'	&amp;&amp; zielnegiert == '~') { // nicht `` sondern ''
			temp-&gt;neueKante(ziel,start);
			temp-&gt;neueKante(start+variablen, ziel+variablen); 
			continue;
		}

		if(startnegiert == '~'  &amp;&amp;  zielnegiert == '+') { // nicht `` sondern ''
			temp-&gt;neueKante(start,ziel);
         temp-&gt;neueKante(ziel+variablen,start+variablen);
			continue;
		}

		if(startnegiert == '~' &amp;&amp; zielnegiert == '~') {// nicht `` sondern ''
			temp-&gt;neueKante(start,ziel+variablen);
			temp-&gt;neueKante(ziel,start+variablen);
			continue;
		}
	}
	return temp;
}

void Graph::scc(vector&lt;Komp&gt; &amp;Komponenten) { 
	p_Graph antigraph = gebeAntiGraph();
	long anzkomponente = 0;
//	long *zaeh1er = new long; // fehler siehe unten
	long *zaehler = new long;
	long label[Knotenanzahl]; // f10 falschgeschrieben
	bool besuchte [Knotenanzahl]; 
	long relabel[Knotenanzahl]; // f11 falschgeschrieben
	vector&lt;Komp&gt; Komponenten1;
	for(long i = 0; i&lt;Knotenanzahl; i++){ // f12 i vergessen
		besuchte[i]=false;
		label[i]=-1;
		relabel[i]=-1;
	}
	*zaehler = -1; // fehler mit zeile davor (Rechtschreibfehler f13
	for(long i=0; i&lt;Knotenanzahl;i++){
		Komp Komponente1;
		if(besuchte[i] == false){
			besuche1(i, label,relabel,besuchte,zaehler,Komponente1);
		}
	}

	for(long i=0; i&lt;Knotenanzahl; i++) besuchte[i] = false;

	for(long i=Knotenanzahl-1; i&gt;=0; i--){
		if(besuchte[label[i&rsqb;&rsqb;==false){
			anzkomponente++;
			Komp Komponente;
			cout&lt;&lt;&quot;Starke Zusammenhangskomponente&quot; &lt;&lt; anzkomponente&lt;&lt; &quot;:&quot;&lt;&lt;endl;
			besuche2(label[i],label,relabel,besuchte,antigraph-&gt;gebeKanten(),Komponente);

			cout&lt;&lt;endl;

			Komponenten.push_back(Komponente);
		}
	}
	delete antigraph;
}

	void Graph::besuche1(long a, long label[], long relabel[], bool besuchte[],long*zaehler, Komp &amp;Komponente1){

		besuchte[a]=true;
		p_Adjazenzkante aktKante = Kanten[a];

		while (aktKante !=NULL){
			if(besuchte[aktKante-&gt;gebeZiel()]==false){
				besuche1(aktKante-&gt;gebeZiel(),label, relabel, besuchte, zaehler, Komponente1);
			}
			aktKante = aktKante-&gt;gebeNaechste();
		}

		(*zaehler)++;
		label[*zaehler] = a;
		relabel[a] = *zaehler;
		Komponente1[a] = a;
	}

	void Graph::besuche2(long a, long label[], long relabel[], bool besuchte[], Adjazenzkante **AntiKanten, Komp &amp;Komponente){
		besuchte[a]= true;
		p_Adjazenzkante aktKante = AntiKanten[a];
		while (aktKante != NULL) {
			if (besuchte[aktKante-&gt;gebeZiel()]==false) besuche2(aktKante-&gt;gebeZiel(), label,relabel,besuchte,AntiKanten,Komponente); // rechtschreibfehler relabel
			aktKante=aktKante-&gt;gebeNaechste();
		}

		Komponente[a]= a;
		cout &lt;&lt; &quot;&quot; &lt;&lt; a;        
	}

void Graph::gerichteterKreis(vector&lt;Komp&gt; Komponenten, bool *kreis) { // rechtschreibfehler

	vector&lt;Komp&gt;::iterator iterkomponenten;
	map&lt;long,long&gt;::iterator itermap; // diese zeile vergessen f15
	map&lt;long,long&gt;::iterator iter;
	long test;

	for(iterkomponenten=Komponenten.begin(); iterkomponenten!=Komponenten.end();iterkomponenten++) {
		for(itermap =(*iterkomponenten).begin(); itermap !=(*iterkomponenten).end(); itermap++){
			if((*itermap).first &lt; (Knotenanzahl/2)){
				test=(*itermap).first+Knotenanzahl/2;
				if((*iterkomponenten).find(test)!=(*iterkomponenten).end()){ // inahlt von iterkompenenten end ==&gt; * !!! fehler 16
					*kreis=true;
					//return; // falsch geht nicht funktion ist ehe void FEHLER auch in musterlösung!!! f17
				}
			}
		}	
	}
	*kreis=false;
}

bool* Graph::erfuellendeBelegung(){
	bool gesetzt[Knotenanzahl];
	bool*wert= new bool[Knotenanzahl];
	long angesetzt =0; // wieder ANZGESETZT? fehler 23 AHA : einmal angesetzt statt anzgesetzt (== anzahl der gesetzten?) folge fehler
	long i=0;
	long label[Knotenanzahl];

	//bool *besuchte =new bool[Knotenanzahl];

	bool besuchte[Knotenanzahl];
	long relabel[Knotenanzahl];	
	long *zaehler =new long;
	Komp Komponente1;
	long test;

	for(long j=0; j &lt; Knotenanzahl; j++) {
		besuchte[j] = false;
		label[j]=-1;
		relabel[j]=-1;
		gesetzt[j] = false;
	}

	*zaehler = -1;

	while(angesetzt != Knotenanzahl) { // folge fehler mit anzgesetzt ; wir machen jetzt draus angesetzt
		while(gesetzt[i]==true){
			if(i==Knotenanzahl) {
				cout &lt;&lt; &quot;Fehler beim Finden einer zulaessigen Belegung&quot; &lt;&lt; endl;
				exit(1);
			}
			i++;
		}
		besuche1 (i,label,relabel,besuchte,zaehler,Komponente1); // fehler nicht relable sondern relabel /f18
		if(i &lt; (Knotenanzahl/2)) test = i +Knotenanzahl/2;
		else test= i - Knotenanzahl/2;

		if(Komponente1.find(test)==Komponente1.end()) {
			//negiertes nicht in Komponente enthalten
			for(long j=0; j&lt;Knotenanzahl;j++){
			//to do: mit Komponenten
				if(besuchte[j]==true) {
					gesetzt[j] = true;
					angesetzt++; // fehler f22 FALSCHGESCHRIEBEN
					wert[j] = true;
					entfernen(j);
					if(j &lt; (Knotenanzahl/2)) { // VARIABLENNAMEN IMMER SO SCHREIBEN WIE SIE DEKLARIERT WORDEN SIND! hier Knotenanzahl //f19
						gesetzt[j+Knotenanzahl/2]=true;
						angesetzt++; // wieder der tolle folgefehler (das kommt uebrigens davon, wenn man den code nicht dokumentiert) Kritik auch hier an die Assi-Frau!!!!
						entfernen(j+Knotenanzahl/2);
					}
					else{
						gesetzt[j-Knotenanzahl/2] = true; // schreibfehler: gesetzt NICHT gesezt!// f20
						angesetzt++; // schonwieder .. fuck!
						wert[j-Knotenanzahl/2]=false;
						entfernen(j-Knotenanzahl/2);
					}
				}
			}
		}
		else{
			long temp;
			for(long j=0; j&lt;Knotenanzahl;j++)
				besuchte[j] = gesetzt[j]; // Wieder rechtschreibfehler (siehe fehler f20)
				temp = i;
				i = test;
				test = temp;
				besuche1(i,label, relabel, besuchte, zaehler,Komponente1);
			for(long j=0; j&lt;Knotenanzahl;j++){
			//to do: mit Komponenten
				if(besuchte[j]==true){
					gesetzt[j] = true; 
					angesetzt++; // fehler f22
					wert[j] = true;
					entfernen(j);
					if(j &lt; (Knotenanzahl/2)){
						gesetzt[j+Knotenanzahl/2] = true;
						angesetzt++;
						wert[j-Knotenanzahl/2] = false;
						entfernen(j+Knotenanzahl/2);
					}

					else {
						gesetzt[j-Knotenanzahl/2] = true; // wieder ein rechtschreibfehler 't' vergessen
						angesetzt++; // bla wieder fehler
						wert[j-Knotenanzahl/2] = false;
						entfernen(j-Knotenanzahl/2);
					}
				}
			}	
		}
	}
	return wert;
}

void ausgabe (bool *belegung, long Knotenanzahl){
	cout &lt;&lt; endl &lt;&lt; &quot;Erfuellende Belegung für 2SAT-Instanz:&quot; &lt;&lt; endl;
	for(int i=0; i&lt; Knotenanzahl/2; i++) {
		cout &lt;&lt; &quot;x&quot;&lt;&lt; i &lt;&lt; &quot;=&quot; &lt;&lt; belegung[i] &lt;&lt; endl;
	}
}
///////////////////////////////////////////////

int main(int argc, char *argv[])
{
  	bool kreis;
	bool *belegung;
	vector&lt;Komp&gt; Komponenten;

	if (argc != 2){
		cout &lt;&lt; &quot;Benutzung: zusammenhang &lt;Dateiname&gt;&quot; &lt;&lt; endl;
		return -1;
	}

	string dateiname(argv[1]);
	Graph *arbeiter;

	arbeiter = parseDatei(dateiname);

	if (arbeiter == 0) return -1;

	arbeiter-&gt;scc(Komponenten);

	arbeiter-&gt;gerichteterKreis(Komponenten, &amp;kreis);

	if(kreis == true){cout &lt;&lt; &quot;Keine erfuellende Belegung für diese 2SAT-Instanz moeglich&quot; &lt;&lt; endl;
		return 0;
	}									

	belegung= (bool*) malloc((arbeiter-&gt;gebeKnotenanzahl())*sizeof(bool));
	belegung = arbeiter-&gt;erfuellendeBelegung();
	ausgabe(belegung,arbeiter-&gt;gebeKnotenanzahl());

  system(&quot;PAUSE&quot;);	
  return 0;
}
</code></pre>
<p>Die 2SAT.TXT sieht so aus:</p>
<blockquote>
<p>4<br />
+x0 +x1<br />
+x1 -x0<br />
-x1 -x0<br />
+x1 +x2<br />
+x2 +x3<br />
-x3 +x0</p>
</blockquote>
<p>Ich verwende Dev-cpp 4.9. Der hat keine Fehler angezeigt.</p>
<p>Vielen Dank für die Hilfe<br />
gast6677</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133090/2sat-korrektur-programm-schmiert-ab</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 19:04:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133090.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 15 Jan 2006 13:21:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 2sat-korrektur: Programm schmiert ab on Sun, 15 Jan 2006 13:21:58 GMT]]></title><description><![CDATA[<p>Hallo cpp-Forum,</p>
<p>ich habe ein Problemchen ;-). Ich habe hierr einen fremden Code, den ich berichtigen will.<br />
Ich habe bereits die Fehlerquelle gefunden, jedoch wundere ich mich, dass es nicht funktioniert.<br />
Seht selbst:</p>
<p>Der Fehler liegt hier (weil er nur bis dahin kommt; Zeile 188):</p>
<pre><code class="language-cpp">Graph *temp = new Graph(2*variablen);
</code></pre>
<p>Hier der ganze Code:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;stdlib.h&gt;

// zusaetzliche libs
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;map&gt;
#include &lt;vector&gt;

using namespace std;

///////////////////////////////////////////////
//map wird verwendet, damit schneller nach Elementen gesucht werden kann

typedef map&lt;long,long&gt; Komp;

class Adjazenzkante {

	public:
	Adjazenzkante(long ziel);
	~Adjazenzkante();

	void setzeNaechste(Adjazenzkante *a);

        Adjazenzkante *gebeNaechste(void);

	long gebeZiel(void);

	private:
	long ziel;
	Adjazenzkante *naechste;

};

typedef Adjazenzkante* p_Adjazenzkante;
typedef p_Adjazenzkante* pp_Adjazenzkante;

Adjazenzkante::Adjazenzkante(long ziel) {
	this-&gt;ziel = ziel;
	this-&gt;naechste = 0;

}

Adjazenzkante::~Adjazenzkante() {
	if (naechste != 0) delete naechste;
}

void Adjazenzkante::setzeNaechste(Adjazenzkante *a) {
	naechste = a;
}

Adjazenzkante *Adjazenzkante::gebeNaechste(){
	return naechste;
}

long Adjazenzkante::gebeZiel(void) {
	return ziel;
}

//////////////////////// 

class Graph{

	public:
	Graph(long Knoten);
	~Graph();

	void entfernen(long k);
	bool neueKante (long start, long ziel);
//	Graph *gebeUngerichteten Graphen(); // f1
	Graph *gebeUngerichteten;
	Graph *gebeAntiGraph();	
	Adjazenzkante **gebeKanten();
	long gebeKnotenanzahl();

	//Die Algorithmen
	void scc(vector&lt;Komp&gt; &amp;Komponenten);
//	void gerichteterKreis(vector&lt;Komp&gt; Komponenten, bool +kreis);
	void gerichteterKreis(vector&lt;Komp&gt; Komponenten, bool *kreis);
	bool* erfuellendeBelegung();

	private:
	Adjazenzkante **Kanten;
	long Knotenanzahl;
	void besuche1(long a, long labell[], long relable[], bool besuchte[],
	long* zaehler, Komp &amp;Komponente1);
	void besuche2 (long a, long label[], long relabel[], bool besuchte[],
	Adjazenzkante **Knoten, Komp &amp;Komponente);

};

typedef Graph* p_Graph;

void Graph::entfernen (long k){
	Kanten[k]=0;
}

Graph::Graph(long Knoten){
	Knotenanzahl=Knoten;
	Kanten = new p_Adjazenzkante[Knotenanzahl];
	for(long i = 0; 1&lt;Knoten; i++){
		Kanten[i] = 0;
	}
}

Graph::~Graph() {
	for (long i=0; i&lt;Knotenanzahl; i++){
		if(Kanten[i]!= NULL) delete Kanten[i]; // f3
	}
	delete[] Kanten;
}

bool Graph::neueKante(long start, long ziel){
	p_Adjazenzkante laeufer;
	p_Adjazenzkante davor;
	laeufer = Kanten[start];
	if (laeufer==NULL){
		Kanten[start] = new Adjazenzkante(ziel);
		return true;
	}

	while(laeufer !=NULL){
		davor = laeufer;
		laeufer= laeufer-&gt;gebeNaechste();
	}

	davor-&gt; setzeNaechste(new Adjazenzkante(ziel));
	return true;
}

pp_Adjazenzkante Graph::gebeKanten(){
	return Kanten;
}

p_Graph Graph::gebeAntiGraph(){
	p_Graph temp = new Graph(Knotenanzahl);
	for(int i=0; i&lt;Knotenanzahl; i++) {
		p_Adjazenzkante aktKante = Kanten[i];
		while(aktKante !=NULL){
			temp-&gt;neueKante(aktKante-&gt;gebeZiel(),i);
			aktKante=aktKante-&gt;gebeNaechste();
		}
	}
	return temp;
}

long Graph::gebeKnotenanzahl(){ // f4 zusammengeschrieben
	return Knotenanzahl;
}

Graph *parseDatei (string dateiname){
	long variablen, kanten;
	char startnegiert, zielnegiert, x;
	long start, ziel;
	char negiert;
	ifstream datei;

	datei.open(dateiname.c_str(), ifstream::in);
	if (datei==0) {
		cerr&lt;&lt;&quot;Datei nicht gefunden&quot;&lt;&lt; endl;
		return 0;
    	}	

	datei &gt;&gt; variablen;
	Graph *temp = new Graph(2*variablen);
	while ( !datei.eof() ) { 
		datei &gt;&gt; startnegiert;  // f5 falschgeschrieben
 		datei &gt;&gt; x;                     // x einlesen 
		datei &gt;&gt; start; 
		datei &gt;&gt; zielnegiert; 
		datei &gt;&gt; x;                    //x einlesen 
		datei &gt;&gt; ziel;
		if (startnegiert =='+' &amp;&amp; zielnegiert == '+') {  // nicht `` sondern ''
			temp-&gt;neueKante(start+variablen,ziel);
			temp-&gt;neueKante(ziel+variablen, start); 
			continue;
		}	
		if(startnegiert == '+'	&amp;&amp; zielnegiert == '~') { // nicht `` sondern ''
			temp-&gt;neueKante(ziel,start);
			temp-&gt;neueKante(start+variablen, ziel+variablen); 
			continue;
		}

		if(startnegiert == '~'  &amp;&amp;  zielnegiert == '+') { // nicht `` sondern ''
			temp-&gt;neueKante(start,ziel);
         temp-&gt;neueKante(ziel+variablen,start+variablen);
			continue;
		}

		if(startnegiert == '~' &amp;&amp; zielnegiert == '~') {// nicht `` sondern ''
			temp-&gt;neueKante(start,ziel+variablen);
			temp-&gt;neueKante(ziel,start+variablen);
			continue;
		}
	}
	return temp;
}

void Graph::scc(vector&lt;Komp&gt; &amp;Komponenten) { 
	p_Graph antigraph = gebeAntiGraph();
	long anzkomponente = 0;
//	long *zaeh1er = new long; // fehler siehe unten
	long *zaehler = new long;
	long label[Knotenanzahl]; // f10 falschgeschrieben
	bool besuchte [Knotenanzahl]; 
	long relabel[Knotenanzahl]; // f11 falschgeschrieben
	vector&lt;Komp&gt; Komponenten1;
	for(long i = 0; i&lt;Knotenanzahl; i++){ // f12 i vergessen
		besuchte[i]=false;
		label[i]=-1;
		relabel[i]=-1;
	}
	*zaehler = -1; // fehler mit zeile davor (Rechtschreibfehler f13
	for(long i=0; i&lt;Knotenanzahl;i++){
		Komp Komponente1;
		if(besuchte[i] == false){
			besuche1(i, label,relabel,besuchte,zaehler,Komponente1);
		}
	}

	for(long i=0; i&lt;Knotenanzahl; i++) besuchte[i] = false;

	for(long i=Knotenanzahl-1; i&gt;=0; i--){
		if(besuchte[label[i&rsqb;&rsqb;==false){
			anzkomponente++;
			Komp Komponente;
			cout&lt;&lt;&quot;Starke Zusammenhangskomponente&quot; &lt;&lt; anzkomponente&lt;&lt; &quot;:&quot;&lt;&lt;endl;
			besuche2(label[i],label,relabel,besuchte,antigraph-&gt;gebeKanten(),Komponente);

			cout&lt;&lt;endl;

			Komponenten.push_back(Komponente);
		}
	}
	delete antigraph;
}

	void Graph::besuche1(long a, long label[], long relabel[], bool besuchte[],long*zaehler, Komp &amp;Komponente1){

		besuchte[a]=true;
		p_Adjazenzkante aktKante = Kanten[a];

		while (aktKante !=NULL){
			if(besuchte[aktKante-&gt;gebeZiel()]==false){
				besuche1(aktKante-&gt;gebeZiel(),label, relabel, besuchte, zaehler, Komponente1);
			}
			aktKante = aktKante-&gt;gebeNaechste();
		}

		(*zaehler)++;
		label[*zaehler] = a;
		relabel[a] = *zaehler;
		Komponente1[a] = a;
	}

	void Graph::besuche2(long a, long label[], long relabel[], bool besuchte[], Adjazenzkante **AntiKanten, Komp &amp;Komponente){
		besuchte[a]= true;
		p_Adjazenzkante aktKante = AntiKanten[a];
		while (aktKante != NULL) {
			if (besuchte[aktKante-&gt;gebeZiel()]==false) besuche2(aktKante-&gt;gebeZiel(), label,relabel,besuchte,AntiKanten,Komponente); // rechtschreibfehler relabel
			aktKante=aktKante-&gt;gebeNaechste();
		}

		Komponente[a]= a;
		cout &lt;&lt; &quot;&quot; &lt;&lt; a;        
	}

void Graph::gerichteterKreis(vector&lt;Komp&gt; Komponenten, bool *kreis) { // rechtschreibfehler

	vector&lt;Komp&gt;::iterator iterkomponenten;
	map&lt;long,long&gt;::iterator itermap; // diese zeile vergessen f15
	map&lt;long,long&gt;::iterator iter;
	long test;

	for(iterkomponenten=Komponenten.begin(); iterkomponenten!=Komponenten.end();iterkomponenten++) {
		for(itermap =(*iterkomponenten).begin(); itermap !=(*iterkomponenten).end(); itermap++){
			if((*itermap).first &lt; (Knotenanzahl/2)){
				test=(*itermap).first+Knotenanzahl/2;
				if((*iterkomponenten).find(test)!=(*iterkomponenten).end()){ // inahlt von iterkompenenten end ==&gt; * !!! fehler 16
					*kreis=true;
					//return; // falsch geht nicht funktion ist ehe void FEHLER auch in musterlösung!!! f17
				}
			}
		}	
	}
	*kreis=false;
}

bool* Graph::erfuellendeBelegung(){
	bool gesetzt[Knotenanzahl];
	bool*wert= new bool[Knotenanzahl];
	long angesetzt =0; // wieder ANZGESETZT? fehler 23 AHA : einmal angesetzt statt anzgesetzt (== anzahl der gesetzten?) folge fehler
	long i=0;
	long label[Knotenanzahl];

	//bool *besuchte =new bool[Knotenanzahl];

	bool besuchte[Knotenanzahl];
	long relabel[Knotenanzahl];	
	long *zaehler =new long;
	Komp Komponente1;
	long test;

	for(long j=0; j &lt; Knotenanzahl; j++) {
		besuchte[j] = false;
		label[j]=-1;
		relabel[j]=-1;
		gesetzt[j] = false;
	}

	*zaehler = -1;

	while(angesetzt != Knotenanzahl) { // folge fehler mit anzgesetzt ; wir machen jetzt draus angesetzt
		while(gesetzt[i]==true){
			if(i==Knotenanzahl) {
				cout &lt;&lt; &quot;Fehler beim Finden einer zulaessigen Belegung&quot; &lt;&lt; endl;
				exit(1);
			}
			i++;
		}
		besuche1 (i,label,relabel,besuchte,zaehler,Komponente1); // fehler nicht relable sondern relabel /f18
		if(i &lt; (Knotenanzahl/2)) test = i +Knotenanzahl/2;
		else test= i - Knotenanzahl/2;

		if(Komponente1.find(test)==Komponente1.end()) {
			//negiertes nicht in Komponente enthalten
			for(long j=0; j&lt;Knotenanzahl;j++){
			//to do: mit Komponenten
				if(besuchte[j]==true) {
					gesetzt[j] = true;
					angesetzt++; // fehler f22 FALSCHGESCHRIEBEN
					wert[j] = true;
					entfernen(j);
					if(j &lt; (Knotenanzahl/2)) { // VARIABLENNAMEN IMMER SO SCHREIBEN WIE SIE DEKLARIERT WORDEN SIND! hier Knotenanzahl //f19
						gesetzt[j+Knotenanzahl/2]=true;
						angesetzt++; // wieder der tolle folgefehler (das kommt uebrigens davon, wenn man den code nicht dokumentiert) Kritik auch hier an die Assi-Frau!!!!
						entfernen(j+Knotenanzahl/2);
					}
					else{
						gesetzt[j-Knotenanzahl/2] = true; // schreibfehler: gesetzt NICHT gesezt!// f20
						angesetzt++; // schonwieder .. fuck!
						wert[j-Knotenanzahl/2]=false;
						entfernen(j-Knotenanzahl/2);
					}
				}
			}
		}
		else{
			long temp;
			for(long j=0; j&lt;Knotenanzahl;j++)
				besuchte[j] = gesetzt[j]; // Wieder rechtschreibfehler (siehe fehler f20)
				temp = i;
				i = test;
				test = temp;
				besuche1(i,label, relabel, besuchte, zaehler,Komponente1);
			for(long j=0; j&lt;Knotenanzahl;j++){
			//to do: mit Komponenten
				if(besuchte[j]==true){
					gesetzt[j] = true; 
					angesetzt++; // fehler f22
					wert[j] = true;
					entfernen(j);
					if(j &lt; (Knotenanzahl/2)){
						gesetzt[j+Knotenanzahl/2] = true;
						angesetzt++;
						wert[j-Knotenanzahl/2] = false;
						entfernen(j+Knotenanzahl/2);
					}

					else {
						gesetzt[j-Knotenanzahl/2] = true; // wieder ein rechtschreibfehler 't' vergessen
						angesetzt++; // bla wieder fehler
						wert[j-Knotenanzahl/2] = false;
						entfernen(j-Knotenanzahl/2);
					}
				}
			}	
		}
	}
	return wert;
}

void ausgabe (bool *belegung, long Knotenanzahl){
	cout &lt;&lt; endl &lt;&lt; &quot;Erfuellende Belegung für 2SAT-Instanz:&quot; &lt;&lt; endl;
	for(int i=0; i&lt; Knotenanzahl/2; i++) {
		cout &lt;&lt; &quot;x&quot;&lt;&lt; i &lt;&lt; &quot;=&quot; &lt;&lt; belegung[i] &lt;&lt; endl;
	}
}
///////////////////////////////////////////////

int main(int argc, char *argv[])
{
  	bool kreis;
	bool *belegung;
	vector&lt;Komp&gt; Komponenten;

	if (argc != 2){
		cout &lt;&lt; &quot;Benutzung: zusammenhang &lt;Dateiname&gt;&quot; &lt;&lt; endl;
		return -1;
	}

	string dateiname(argv[1]);
	Graph *arbeiter;

	arbeiter = parseDatei(dateiname);

	if (arbeiter == 0) return -1;

	arbeiter-&gt;scc(Komponenten);

	arbeiter-&gt;gerichteterKreis(Komponenten, &amp;kreis);

	if(kreis == true){cout &lt;&lt; &quot;Keine erfuellende Belegung für diese 2SAT-Instanz moeglich&quot; &lt;&lt; endl;
		return 0;
	}									

	belegung= (bool*) malloc((arbeiter-&gt;gebeKnotenanzahl())*sizeof(bool));
	belegung = arbeiter-&gt;erfuellendeBelegung();
	ausgabe(belegung,arbeiter-&gt;gebeKnotenanzahl());

  system(&quot;PAUSE&quot;);	
  return 0;
}
</code></pre>
<p>Die 2SAT.TXT sieht so aus:</p>
<blockquote>
<p>4<br />
+x0 +x1<br />
+x1 -x0<br />
-x1 -x0<br />
+x1 +x2<br />
+x2 +x3<br />
-x3 +x0</p>
</blockquote>
<p>Ich verwende Dev-cpp 4.9. Der hat keine Fehler angezeigt.</p>
<p>Vielen Dank für die Hilfe<br />
gast6677</p>
]]></description><link>https://www.c-plusplus.net/forum/post/967024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/967024</guid><dc:creator><![CDATA[gast6677]]></dc:creator><pubDate>Sun, 15 Jan 2006 13:21:58 GMT</pubDate></item><item><title><![CDATA[Reply to 2sat-korrektur: Programm schmiert ab on Mon, 16 Jan 2006 07:40:43 GMT]]></title><description><![CDATA[<p>gast6677 schrieb:</p>
<blockquote>
<p>Der Fehler liegt hier (weil er nur bis dahin kommt; Zeile 188):</p>
<pre><code class="language-cpp">Graph *temp = new Graph(2*variablen);
</code></pre>
</blockquote>
<p>Zwischenfrage: Wie äußert sich denn der Fehler?</p>
<p>Ansonsten solltest du mal einen Debugger einschalten und nachsehen, was dein Programm dort macht.</p>
<p>(was mir schon auffällt: im Programm prüfst du auf '~', aber in der Datei steht '-' für negative Werte, könnte es daran liegen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/967666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/967666</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 16 Jan 2006 07:40:43 GMT</pubDate></item></channel></rss>