Re: Das neue Auswendig lernen und die neuen Übungen -

Tiefen und Breitensuche:

...

Die Tiefen und Breitensuche kann ich ja auf meine graphen anwenden. Sie sind nicht im Array, aber in CSV Tabellen

CSV Dateien dienen dazu, Tabellen rein zu tun. Das lässt sich darauf anwenden.

Computersysteme I/II ist trotzdem ein Stück. Tiefen und Breitensuche sind interessant. Bitte unterschätzen Sie Computersysteme I/II nicht.

Tiefen und Breitensuche steht auch in Algorithmen in C.

Der hat ein eigenes Kapitel gerichtete Graphen. Und davor, wichtiger, wichtigeres Kapitel - Elementare Algorithmen für Graphen

Und davor, wichtiger, wichtigeres Kapitel - Elementare Algorithmen für Graphen

Gut darum kümmere ich mich jetzthttps://phpbb3.ituenix.de/viewtopic.php?t=196&sid=c316c43ca77b5440d9e0b83dd44c17d9&start=34

Damit kann man auch Labyrinthe lösen

Hier ist zum Beispiel so ein Stern

Ein vollständiger biparate Graph, wie ich es gelernt. Nein, kein vollständiger Biparate Graph, ein vollständiger Graph - der ist da abgebildet, er ist ähnlich einem Stern.

Also, ich lege jetzt los.

Also, was wichtig ist, sie haben 1.) Eine Adjanzenmatrix 2.) Eine Tabellarische Graphendarstellung 3.) Eine Adjazenzliste,

das steht nicht nur in Algorithmischer Mathematik. Das steht auch in Algorithmen in C, von Robert Sedgewick. In beiden steht das. Ich denke aber nicht, dass ich darüber reden kann, weil es ist urheberrechtlich geschützt.

Adjanzenzliste ist, wenn zu jedem Zustand, bzw. Knoten, bei dem eine 1 Markierung zum anderen ist, eine Liste machen, was ja wieder ein Graph ist, von dem Zustand aus, mit Zuständen, die folgen

Ich mache jetzt erst Mal eine Liste mit allen Begriffen, aus allen Quellen, ich nehme nicht algo Mathematik. Ich nehme das aus dem Netz

Ich weiss nur nicht, ob ich Tex nehmen soll. Oder ob ich TXT nehmen soll

Ich nehme TeX

Das habe ich geschrieben, rein kommt

Tiefensuche Breitensuche

Die englischen Begriffe dafür

Adjanzenmatrix Adjanzenzliste Tabelle

DavidStern, ...

\includegraphics[width=\textwidth]{.././nextcloud/graph-1.jpg}

\includegraphics[width=\textwidth]{.././nextcloud/graph-2.jpg}

\includegraphics[width=\textwidth]{.././nextcloud/graph-3.jpg}

Nebenbei wir haben bei V und E. Zwei Mengen und E ist eine Untermenge von V. Das ist das witzige. Das habe ich bisher schon so gesehen, aber die genaue Menge erst jetzt. Aber E ist untermenge von V

Und jetzt das verrückte

(E,V)

ist ja selber eine Menge. Und dabei ist E untermenge von V

Richtig heisst es

(V,E)

Und E ist Untermenge von V.

Ach so, aber die Zweite Menge, der V ist gr"osser, das ist logsich und sie hat die Gr"osse/Kardinalit"at von einem Binomialkoeffizienten.

Das logisch. Denken wir mal nach

Wir haben

Knoten {1,2}

Das ist die Menge mit Knoten

Jetzt haben wir

{1,2,3}

Zwischen allen kann eine Verbindung bestehen. Das erinnert - an die Fakult"at, so

Geordnete Stichproben oder ungeordnet. Ohne zur"ucklegen.. daran erinnert das. warum

1,2
1,3
2,3

...

Das ist logisch

Und ein Graph ist das

{1,2,3,{1,2},{1,3},{2,3}}

oder

{1,2,3,{{1,2},{1,3},{2,3}}}

Das klingt logisch

1.) Geordnete ungeordnetes Ziehen ohne zur"ucklegen
2.) Zwei Mengen V, E
3.) Aber die Menge E beruht auf der ersten Menge

Ich weiss  nur nicht das

(V chr 2)

Das kann ich mir nicht erkl"aren. Was das ist. Ich meine, ich weiss inzwischen was der Binomialkoeffizient ist

aber es gibt eine Potenzmenge, and i don't know. Mit der Potenzmenge.

Also, auf Gut Deutsch

{1,2,3,4}

{{1,2},{1,3},{1,4},{2,3}{2,4},{3,4}}

Dann ist die Menge und das ist eine Menge

(V,E)

Das ist eben eine Menge

{1,2,3,4}

{{1,2},{1,3},{1,4},{2,3}{2,4},{3,4}}

Dann ist

{{1,2,3,4}, {{1,2},{1,3},{1,4},{2,3}{2,4},{3,4}}}

das ist logisch und das vermerke ich so in meinen aufschrieben


\includegraphics[width=\textwidth]{./nextcloud/graph-1.jpg}

\includegraphics[width=\textwidth]{./nextcloud/graph-2.jpg}

\includegraphics[width=\textwidth]{./nextcloud/graph-3.jpg}


Es hat nat"urlich nur der vollst"andige Graph, die Kantenmenge (V chr 2)
nat"urlich nur der. Weil die anderen sind weniger. Das ist logisch. Wenn einen Graphen

{1,2,3}
habe und

{1,2} und {2,3}

ist das weniger als

{1,2},{1,3},{2,3}

Und der Binomialkoeffizient von ist gr"osser als n

Und es ist maximal der Binomialkoeffizient

Halt, frage - geht auch nur

{1,2}
bei {1,2,3}

Ja, der David Stern beweisst es, es ist kein Zusammenh"angender Graph


\includegraphics[width=\textwidth]{./nextcloud/graph-1.jpg}

\includegraphics[width=\textwidth]{./nextcloud/graph-2.jpg}

\includegraphics[width=\textwidth]{./nextcloud/graph-3.jpg}


1. Unzusammenh”angende Graphen
E := {{1,2}}
E := {{1,3}}
E := {{2,3}}
2. Unvollst”andige Graphen
E := {{1,2},{2,3}}
E := {{1,3},{2,3}}
...
3. vollst”andige Graphen
E := {{1,2},{1,3}{2,3}}

1. Unzusammenh”angende Graphen
E := {{1,2}}
E := {{1,3}}
E := {{2,3}}
2. Unvollst”andige Graphen
E := {{1,2},{2,3}}
E := {{1,3},{2,3}}
...
3. vollst”andige Graphen
E := {{1,2},{1,3}{2,3}}


Wichtig ist der Satz, den muss man wohl auswendig lernen

Douglas in der Graphentheorie Introduction to Graph Theory

Which graphs embed in the plane? ...

Ich kann das zitieren, weil das auf Deutsch ist
Welche Graphen sind in der Ebene eingebettet? Wir haben bewiesen, dass K_5 und K_{3,3} dies nicht tun. Tats"achlich sind dies die entscheidenden Graphen und f"uhren zu einer Charakterisierung planarer Graphen, die als Kuratowski-Theorem bekannt ist. Kasimir Kuratowski fragte Frank Haray einmal nach dem Ursprung der Notation f"ur K_5 und K_{3,3}. Haray antwortete: „Das K in K_5“ steht f"ur Kasimir und das K in K_{3,3} steht f"ur Kuratowski

Ausserdem ist es ja ein Zitat

Also normalerweise

schreibt man das als

{(1,4),(1,5),...}

Das sind geordnete Paare. Aber es ist ja egal, ob ich

{{1,4},...}

Schreibe, weil das ist eine Menge. Es sind geordnete Paare, aber die Geordneten Paare sind ja wieder eine Menge.

Damit ist die Menge der Kanten E wichtiger, als die der Vertices. Weil, wenn ich nur die Knoten habe, ist der Graph nicht definiert.

"Uber die Kanten E

E := {(1,2)(1,3),..}

Ist der Graph vollst"andig definiert, weil die Knoten sind ja drin

OK, die Sache ist die dass jetzt der Teilgraph kommt. Jetzt wo wir wissen, was ein graph ist, wissen wir was ein Teilgraph ist

V' subseteq V
E' subseteq E

aber was ist ein Induzierter?

Na ja, wir haben

E:= {1,2},{1,3},{1,4},{2,3},{2,4},{3,4}

Und untermenge

V' := {1,2,3}

Aber wir k"onnten jetzt haben:

E' := {{1,2}}

w"ahrend V' := {1,2,3} ist. Dann ist das trotzdem untermenge. Aber nicht induziert

Und zusammenh"angend, heisst, dass es einen u-v-Weg gibt

Jetzt muss ich aufh"oren, das ist urheberrechtlich gesch"utzt

Das

{1,2},{1,3}...

habe ich mir selber ausgedacht, es so hin zu schreiben, deswegen nicht urheberrechtlich

Aber, jetzt kommt Bald tiefen und breitensuche, das ist nicht gesch"utzt, weil im Netz

Ah, jetzt weiss ich aber, was eine Komponente ist, und jetzt sieht man, wie wichtig es ist, den Text genau zu lesen. Es lohnt sich einfach nicht Tiefensuche an zu schauen

Sie brauchen Komponenten f"ur Tiefensuche und sie brauchen Induzierte Teilgraph f"ur Komponente

Eine Komponente ist einfach eine Telmenge, aber die mit dem l"angsten Zusammenhang

Ein weg im Graph ist zum Beispiel

{{1,2},{2,3},{3,4},{4,5}}

Aber dabei kann es auch

 {1,4}

geben, aber der Weg ist ein Untergraph. Allerdings zuammenh"angend, wenn es denn so ist, deswegen ist das eine Komponente.

Aber halt, das stimmt nicht, es ist der maximalst l"angste Teilgraph, der maximalst l"angste

Der maximal l"angste Weg - der in einem Graphen m"oglichs ist

\includegraphics[width=\textwidth]{./nextcloud/graph-1.jpg}

\includegraphics[width=\textwidth]{./nextcloud/graph-2.jpg}

\includegraphics[width=\textwidth]{./nextcloud/graph-3.jpg}


Nein folgendes Stimmt nicht - folgendes ist falschaussage

A != B

Falschaussage

A AND B OR C AND D

Dabei

A != B AND C = D

Es gibt Falschaussagen bei Euklid

Dabei ist sie nicht ganz falsch. nicht zu 100% falshc

Aber ein Spaziergang ist eine alternierende Folge von Knoten und Kanten

Das ist ein Spaziergang

(v_{i-1},v_i)

ist ein Spaziergang

{{1,2},{2,3},{3,4}{4,5}}

Eine alternierende Folge von Knoten und Kanten

(v_0,e_1,v_1,e_2...)

und e_i =(v_{i-1},v_i}

Eine alternierende Folge von Knoten und Kanten

(v_0,e_1,v_1,e_2...)

und e_i =(v_{i-1},v_i}

Wenn die folge von Knoten und Kanten altenierend ist


Jetzt braucht man die Kodierung von Zust"anden, also

1.) Adjazenzmatrix
2.) Adjazenzliste
3.) Tabelle

Das steht auch bei Robert Sedgewick

Also eine Adjenzliste - ist auch nur eine Tabelle, aber mit vielen Eintr"agen



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (int argc, char *argv []) {
    time_t t;

    srand ((unsigned) time (\&amp;t));

return 0;
}

1.) Rechne die Zahl in binaer Darstellung  in eine Dezimale Darstellung um
1101111010000001b 56961d
2.) Rechne die Zahl in dezimal darstellung in eine Binaerdarstellung um
61101 1110111010101101
3.) Addiere die drei Zahlen schriftlich
            41347
+           58401
+           35202
-----------------
           134950
4.) Subtrahiere die letzten drei Zahlen schriftlich von der ersten schriftlich
            13042
-            7212
-            2141
-            4081
-----------------
             -392
5.) Rechne die Zahl ins zweier komplement um, mit 8 Bit - und subtrahiere diese zahl von der ersten und rechne das Ergebnis nach dezimal
-59 -45 = -104
11000101 11010011 = 10011000
6.) Multipliziere die zwei Zahlen schriftlich
7078*62613 = 443174814
7.) Dividiere die zwei Zahlen schriftlich
40738/51881 = 0
8.) Errechne x Logarithmisch mit dem Taschenrechner
44121\^x = 468490596
Rechne die Zahl in IEEE-754 um 9513.512695
Ich mache zu erst das hier

Rechne die Zahl in IEEE-754 um 9513.512695

Image IMG_20240424_123947

Image IMG_20240424_125543

Image IMG_20240424_125547

Image IMG_20240424_125552

Image IMG_20240424_125553

Image IMG_20240424_125557

Image IMG_20240424_125601

Image IMG_20240424_125608

Image IMG_20240424_130859

Image IMG_20240424_130902

Image IMG_20240424_184550

Image IMG_20240424_185040

Image IMG_20240424_185045

Image IMG_20240424_185450

Image IMG_20240424_185752

Image IMG_20240424_190005

Image IMG_20240424_190228

Image IMG_20240424_190539

Image IMG_20240424_194432

Image IMG_20240424_195115

Image IMG_20240424_195901

Image IMG_20240424_200311

Image IMG_20240424_200713

Image IMG_20240424_203421

Image IMG_20240424_203425

Image IMG_20240424_204857

Image IMG_20240424_205434

Image IMG_20240425_093126

Image IMG_20240425_093549

Image IMG_20240425_094014

Image IMG_20240425_094338

Image IMG_20240425_105623

Image IMG_20240425_105627

Image IMG_20240425_105906

Image IMG_20240425_110059

Image IMG_20240425_110313

Image IMG_20240425_110512

Image IMG_20240425_232700

Image IMG_20240425_232707

Ich lerne jetzt weiter. Ich lerne den Algorithmus f"ur die Tiefensuche - ich denke, das beste ist, ihn immer wieder auf zu schreiben, ich glaube, das ist das beste. Wenn ich das tue. Ich will, dass er sitzt.


Wenn ich die Tiefensuche habe, bin ich der Sache schon wesentlich n"aher. Ich brauche die Tiefensuche, das ist das wichtigste.

Nein, Entschuldigung, f"ur die Breitensuche - ich mache jetzt ein Zeitlimit - ich lerne bis heute abend um 22:30 Uhr. Und ich schreibe nach dem lernen noch mehr raus, dass ich alles beisammen habe.

Manchmal hilft es, um einen Algorithmus zu lernen, sich die Zeilen zu notieren

Ich sage - (1.) um einen Algorithmus zu lernen, gibt es nur einen weg - nicht verstehen, einfach lernen - wenn man ihn gelernt hat, dann versteht man alles (2.) Es gibt Algorithmen, die sind easy, weil Standard und welche wie den, die muss man lernen
(3.) Lerntechnisch ist es so - wenn ich jede Zeile kenne, um den Algorithmus zu verstehen, muss ich die anderen Zeilen kennen. Ich kann den Algo nur verstehen, wenn ich die anderen Zeilen kann. Deswegen lerne ich jede Zeile - weil das Gehirn ist ein Netz - k"onnnte man sagen, es muss abfragen, um zu verstehen, was bei den anderen steht, dann funktioniert es.

Sie werden es am Ende sehen, auch f"ur sie ist etwas dabei - KI n"amlich mit Kmeans - also ich mag Automaten, aber sie werden es lieben. Und dann k"onnen sie "uber Bitcoins uns Swaps nachdenken.


Das ist ganz einfach. Total easy

Also, sie nehmen von der Schlange runter - nehmen sie ein Element. Vom Top ()

Sie haben ja eine Schlange, die geht so

(1) -> (2) -> (3) -> (4)

Und jetzt reihen sie hinten eine (5) ein. Dann haben sie

(5) -> (1) -> (2) -> (3) -> (4)

OK, das ist anders als beim Stack, da tun sie es ja oben drauf. Aber, wenn sie jetzt was runter nehmen. Von der Schlange, dann nehmen sie Top. Also die (4)

Dann

(5) -> (1) -> (2) -> (3)

Solange die Schlange nicht leer ist, nehmen sie das vom Top

Und jetzt - haben sie nachbarn. Das ist jetzt wohl eine selbstgeschriebene Routine.

die heisst Neighborhood (v)

Also, sie haben vom Top genommen. Von der Schlange

v = Q.Top ()

Das ist jetzt "v"

Und haben sie eine Adjanzenzmatrix, oder Liste oder was auch immer, oder normale Tabelle.

Zum Beispiel bei Zust"anden haben sie

z1 | z4 z5 z7 z12

Das sind die Folgezust"ande. Der Unterschied zum gew"ohnlichen Graphen, ist das zust"ande eingabe Variable x0, x1, ... brauchen.

Egal wie sie haben halt, das ist eine Zeile sagen wir in der Adjanzenzliste

1 | 4 5 7 12

Gut - und die Neighborhood () liefert alle Nachbarknoten

Und dann schreiben sie

for w in Neighborhood ():

Das ist Python, ich benutze C. Aber Python ist nicht schwer zu verstehen

Und diese Schleifen die benutze ich selten

Ich benutze mehr

for (i = 0;  i < 10;  i++);

Aber das gibt es auch bei der Bash, "uberall

for s in \$l
do

done

Zum beispiel

Und dementsprechend

for w in Neighborhood (v):

Jetzt gehen wir die Elemente  alle durch. Jetzt allerdings kommt der Witz.

Wir m"ussen bei dem Algorithmus ja aufpassen Wenn wir jedes Element von jedem untersuche, dann werden  wir eine Endlosschleife fabrizieren

Gut - also m"ussen wir uns den Vorg"anger merken

Und was ist  der Vorg"anger?

Das ist ganz easy.

Wir haben ja v genommen. Das ist unser Ausgangsknoten

v := Q.Top ()

gut und jetzt haben wir v. Und jetzt nehmen wir

for w in Neighborhood (v):

Also nehmen wir alle w. Und die sind von v. Also ist v der Vorg"anger

Und den Vorg"anger speichern wir. Das auf jeden Fall.

Jetzt, wir gehen alle w durch und der Vorg"anger ist v

Der Vorg"anger von w ist v

Und deswegen speichern wir

pred [w] := v

Dann ist zu w, der Vorg"anger v gespeichert

Das heisst, jedes Mal, wenn wir w begegnen und der Vorg"anger v ist - jetzt kommt der Witz. Jetzt lassen wir es

Wenn wir noch mal w begegnen und der Vorg"anger ist gegeben, dnan wird das nicht noch mal besucht

deswegen

if pred [w] == None:

Also, wenn der Vorg"anger von w leer ist. Dann nicht noch mal

Also

for w in Neighborhood (v):
   if pred [w] == None:

So machen wir das nur, wenn der Vorg"anger von w leer ist

Wenn er das ist, dann speichern wir beim Vorg"anger

v, das ist er ja.

Und jetzt kommt Q.Append (w)

Weil wir h"angen w an die Schlange an.

Wenn wir das so sehen, dann haben wir w an die Schlange ang"angt. Also, nur, wenn das nicht schon besucht wurde. Dann wird w

Q.Append (w)

angeh"angt. Gut, das ist jetzt mit der Liste

Damit ist garantiert, dass w besucht wird

Ausser, dass w schon besucht wurde, weil der Vorg"anger v ist

Wenn nicht, dann wird das besucht, das ist ja in der Liste

So einfach

Jetzt gibt es noch einen Zusatz

Was machen wir eigentlich?

Wir suchen eine Komponente.

Was ist jetzt eine Komponente? Das muss man halt lernen sonst nutzt das nichts,

Wenn ich habe

{{1,2},{2,3},{3,4}}

Dann habe ich

component [1] = 2
component [2] = 3
...

Was mache ich jetzt?

Ich mache das einfach so

Das ist zwar anders herum, w"urde ich sagen

component [w] = component [v]

Das heisst, f"ur jedes W - wird die compent [v] gespeichert

Das verstehe ich noch nicht zu 100%

warum nicht v? Aber das ist egal. Das macht nachher erst die Komponente aus

Das ist das, was ausmacht. das ist letzten Endes, weil, wir m"ussen, wir k"onnnten zum Beispiel

printf ()

nehmen. Ich lerne jetzt weite.r Und dann mache ich das Programm, zum erstellen des Graphen und als mit CSV

Ich lerne jetzt aber erst

Dann werde ich folgendes machen. Ich werde das schreiben und dann den Algorithmus in C

Mal sehen ob eine sch"one komponente raus kommmt.

Jetzt mache ich was anderes - jetzt mache ich einen Datenabgleich

Ich denke, der Hauptteil von dem Ger"ust, sitzt jetzt - also von der Wirbels"aule, sitzt was

Und jetzt habe ich folgendes: Quellen

1.) algoritmische Mathematik
2.) Ich habe Robert Sedgewick - Algorithmen in C - da steht ein Sermon von S"atzen
3.) Ich habe das Netz

Und ich mache das jetzt einfach so - ich gucke im Netz, was ich noch finden kann.

Ich schreibe jetzt das Programm zur Erstellung von Adjanzenzmatrizen und Adjanzenzlisten, in CSV. es wird sie auch ineinander umwandeln k"onnen und es wird eine TeX Datei f"ur einen Graphen daraus machen k"onnen.


david@laptop-peaq:~\$ ./a.out
 ,a,b,c,d,e,f,g,h,i,j,k,l
a, 1,0,1,1,1,0,0,0,1,1,1,1
b, 0,1,1,1,0,0,0,0,0,0,0,0
c, 1,0,1,1,0,0,1,0,0,1,1,1
d, 1,1,1,0,1,0,1,1,1,0,1,1
e, 1,1,1,1,1,1,1,0,1,1,1,0
f, 1,1,0,1,0,1,0,1,0,1,1,1
g, 1,1,1,0,1,0,1,0,1,0,1,1
h, 0,1,1,1,0,1,1,1,0,1,0,0
i, 0,0,1,1,1,0,0,0,1,1,0,1
j, 1,1,1,1,1,1,0,1,0,1,1,0
k, 0,0,1,0,0,1,0,0,1,1,1,0
l, 0,0,0,1,1,0,0,1,1,0,0,0
david@laptop-peaq:~\$

// Also, eine Adjanzenmatrix generiert es schon

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c, ", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];

    srand ((unsigned) time (\&amp;t));

    generate_adjanzenzmatrix (a, n);
    print_csv_adjanzenzmatrix (a, n);

return 0;
}

Jetzt schreibe ich das Programm so, dass es sie einliesst.

,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,0,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0

,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,0,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0

// jetzt liest das Programm adjanzenzmatrizen ein und gibt sie aus. Ich mache jetzt listen draus, danach kann man Graphen in TeX draus machen.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
        printf ("%c,", ch);
    }
    scanf ("%cn", \&amp;ch);
    printf ("%cn,", ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%c,", \&amp;ch);
            a [i] [j] = ch - '0';
        }
        scanf ("%cn", \&amp;ch);
        a [i] [j] = ch - '0';
    }

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 2) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixn");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0)
        read_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [1], "g") == 0)
        generate_adjanzenzmatrix (a, n);
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixn");
    print_csv_adjanzenzmatrix (a, n);

return 0;
}

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {

}

void read_csv_adjanzenzliste (int b [N][N], int n) {

}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);

return 0;
}

david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r q
0 1 0 1 1 0 1 1 1 0 1 1
0 0 0 1 1 1 0 0 1 0 1 0
0 1 0 1 1 0 1 1 1 1 1 0
1 0 1 1 1 0 0 1 0 1 0 1
0 0 1 0 0 1 0 0 0 1 1 1
1 0 1 1 0 0 1 1 0 1 0 1
1 1 0 0 0 0 1 0 1 1 0 1
0 1 0 0 0 1 1 1 0 0 0 0
0 0 1 1 1 0 0 0 1 1 0 1
1 0 1 0 1 0 0 1 1 0 1 1
1 0 0 1 1 1 1 1 1 1 0 0
1 1 0 0 0 1 1 1 1 0 0 0
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,b,d,e,g,h,i,k,l, , , ,
b,d,e,f,i,k, , , , , , ,
c,b,d,e,g,h,i,j,k, , , ,
d,a,c,d,e,h,j,l, , , , ,
e,c,f,j,k,l, , , , , , ,
f,a,c,d,g,h,j,l, , , , ,
g,a,b,g,i,j,l, , , , , ,
h,b,f,g,h, , , , , , , ,
i,c,d,e,i,j,l, , , , , ,
j,a,c,e,h,i,k,l, , , , ,
k,a,d,e,f,g,h,i,j, , , ,
l,a,b,f,g,h,i, , , , , ,
david@laptop-peaq:~\$

david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r q
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,b,d,e,g,h,i,k,l, , , ,
b,d,e,f,i,k, , , , , , ,
c,b,d,e,g,h,i,j,k, , , ,
d,a,c,d,e,h,j,l, , , , ,
e,c,f,j,k,l, , , , , , ,
f,a,c,d,g,h,j,l, , , , ,
g,a,b,g,i,j,l, , , , , ,
h,b,f,g,h, , , , , , , ,
i,c,d,e,i,j,l, , , , , ,
j,a,c,e,h,i,k,l, , , , ,
k,a,d,e,f,g,h,i,j, , , ,
l,a,b,f,g,h,i, , , , , ,
david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r p
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,0,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0
david@laptop-peaq:~\$

david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r q
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,b,d,e,g,h,i,k,l, , , ,
b,d,e,f,i,k, , , , , , ,
c,b,d,e,g,h,i,j,k, , , ,
d,a,c,d,e,h,j,l, , , , ,
e,c,f,j,k,l, , , , , , ,
f,a,c,d,g,h,j,l, , , , ,
g,a,b,g,i,j,l, , , , , ,
h,b,f,g,h, , , , , , , ,
i,c,d,e,i,j,l, , , , , ,
j,a,c,e,h,i,k,l, , , , ,
k,a,d,e,f,g,h,i,j, , , ,
l,a,b,f,g,h,i, , , , , ,
david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r p
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,0,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0
david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r q
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,b,d,e,g,h,i,k,l, , , ,
b,d,e,f,i,k, , , , , , ,
c,b,d,e,g,h,i,j,k, , , ,
d,a,c,d,e,h,j,l, , , , ,
e,c,f,j,k,l, , , , , , ,
f,a,c,d,g,h,j,l, , , , ,
g,a,b,g,i,j,l, , , , , ,
h,b,f,g,h, , , , , , , ,
i,c,d,e,i,j,l, , , , , ,
j,a,c,e,h,i,k,l, , , , ,
k,a,d,e,f,g,h,i,j, , , ,
l,a,b,f,g,h,i, , , , , ,
david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r p
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,0,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0
david@laptop-peaq:~\$

 ,a,b,c,d,e,f,g,h,i,j,k,l
a,b,d,e,g,h,i,k,l, , , ,
b,d,e,f,i,k, , , , , , ,
c,b,d,e,g,h,i,j,k, , , ,
d,a,c,d,e,h,j,l, , , , ,
e,c,f,j,k,l, , , , , , ,
f,a,c,d,g,h,j,l, , , , ,
g,a,b,g,i,j,l, , , , , ,
h,b,f,g,h, , , , , , , ,
i,c,d,e,i,j,l, , , , , ,
j,a,c,e,h,i,k,l, , , , ,
k,a,d,e,f,g,h,i,j, , , ,
l,a,b,f,g,h,i, , , , , ,
david@laptop-peaq:~\$ cat ad20240242601.csv | ./a.out r p
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,0,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0
david@laptop-peaq:~\$

Im nächsten Schritt lese ich die Adjanzenzliste ein und konvertiere die in die andere Richtung.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = 0;
    }

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            if (b [i][j] != -1)
                a [i][b[i][j]] = 1;
    }

}

void read_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j, k;
    int ch = 0;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0, k = 0;  j < n-1;  j++) {
            scanf ("%c,", \&amp;ch);
            if (ch == ' ')
                b [i][j] = -1;
            else
                b [i][j] = ch - 'a';

        }
        scanf ("%cn", \&amp;ch);
        if (ch == ' ')
            b [i][j] = -1;
        else
            b [i][j] = ch - 'a';
    }
}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);

return 0;
}

david@laptop-peaq:~\$ cat ad20240242604.csv | ./a.out s p
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,0,1,0,1,1,0,1,1,1,0,1,1
b,0,1,0,1,1,1,0,0,1,0,1,0
c,0,1,0,1,1,0,1,1,1,1,1,0
d,1,0,1,1,1,0,0,1,0,1,0,1
e,0,0,1,0,0,1,0,0,0,1,1,1
f,1,0,1,1,0,0,1,1,0,1,0,1
g,1,1,0,0,0,0,1,0,1,1,0,1
h,0,1,0,0,0,1,1,1,0,0,0,0
i,0,0,1,1,1,0,0,0,1,1,0,1
j,1,0,1,0,1,0,0,1,1,0,1,1
k,1,0,0,1,1,1,1,1,1,1,0,0
l,1,1,0,0,0,1,1,1,1,0,0,0
david@laptop-peaq:~\$ cat ad20240242604.csv | ./a.out s q
 ,a,b,c,d,e,f,g,h,i,j,k,l
a,b,d,e,g,h,i,k,l, , , ,
b,d,e,f,i,k,b, , , , , ,
c,b,d,e,g,h,i,j,k, , , ,
d,a,c,d,e,h,j,l, , , , ,
e,c,f,j,k,l, , , , , , ,
f,a,c,d,g,h,j,l, , , , ,
g,a,b,g,i,j,l, , , , , ,
h,b,f,g,h, , , , , , , ,
i,c,d,e,i,j,l, , , , , ,
j,a,c,e,h,i,k,l, , , , ,
k,a,d,e,f,g,h,i,j, , , ,
l,a,b,f,g,h,i, , , , , ,
david@laptop-peaq:~\$

Im nächsten Schritt, generiere ich eine TeX-Datei mit Graphen.

Image 437135585_1915179012265090_4831882553316332655_n

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = 0;
    }

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            if (b [i][j] != -1)
                a [i][b[i][j]] = 1;
    }

}

void read_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j, k;
    int ch = 0;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0, k = 0;  j < n-1;  j++) {
            scanf ("%c,", \&amp;ch);
            if (ch == ' ')
                b [i][j] = -1;
            else
                b [i][j] = ch - 'a';

        }
        scanf ("%cn", \&amp;ch);
        if (ch == ' ')
            b [i][j] = -1;
        else
            b [i][j] = ch - 'a';
    }
}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

void print_tex (int a [N][N]) {
    int i, j;
    int codez = 8;
    printf("\documentclass{article}n");
    printf("\usepackage[utf8]{inputenc}n");
    printf("\usepackage{pgf, tikz}n");
    printf("\usetikzlibrary{arrows , automata , positioning}n");
    printf("\begin{document}nn");

    printf("\begin{center}n");
    printf("\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]n");
    printf("%Knotenn");

    printf("\node (a) [state, thick] {a};n");
    printf("\node (b) [state, thick, right of= a, below of=a] {b};n");
    printf("\node (c) [state, thick, left of= a, below of=a] {c};n");
    printf("\node (d) [state, thick, right of= b, below of=b] {d};nn");
    printf("\node (e) [state, thick, left of= b, below of=b] {e};nn");
    printf("\node (g) [state, thick, left of=c, below of=c] {g};nn");

    printf("\node (f) [state, thick, below of=d] {f};nn");
    printf("\node (h) [state, thick, below of=e] {h};nn");
    printf("\node (i) [state, thick, below of=g] {i};nn");

    printf("\node (f) [state, thick, below of=f, left of=h] {f};nn");
    printf("\node (h) [state, thick, below of=h, right of=h] {h};nn");
    printf("\node (i) [state, thick, below of=h, left of=h] {i};nn");

    printf("%Verbindungenn");
    printf("\path[thick,->]n");

    char *leftright [] = {"left", "right"};
    char *abovebelow [] = {"above", "below"};

/*    for (i = 0;  i < MAX_STATES;  i++) {
            if ((a [i] - MIN_STATE) == i)
                printf ("(%i) edge [loop] node {%i/%i} (%i)n", i + MIN_STATE, Z_A, y [Z_A][i], a [i]);
            else
                printf ("(%i) edge [bend angle=%i, bend %s,%s] node {%i/%i} (%i)n", i + MIN_STATE, (i+1)*10+(a[i]-MIN_STATE)*5, leftright [(i>(a [i]-MIN_STATE))\&amp;\&amp;((a [i]-MIN_STATE) != 3)], abovebelow    [((i+1)<=a[i])\&amp;\&amp;(a[i] != 4)], Z_A, y [Z_A][i], a [i]);
            if ((b [i] - MIN_STATE) == i)
                printf ("(%i) edge [loop] node {%i/%i} (%i)n", i + MIN_STATE, Z_B, y [Z_B][i], b [i]);
            else
                printf ("(%i) edge [bend angle=%i, bend %s,%s] node {%i/%i} (%i)n", i + MIN_STATE, (i+1)*25+(b[i]-MIN_STATE)*8, leftright [(i<=(b [i]-MIN_STATE)) \&amp;\&amp;((b [i]-MIN_STATE) != 3)], abovebelow [((i+MIN_STATE)>b [i])\&amp;\&amp;(b [i] != 4)], Z_B, y [Z_B][i], b [i]);
    }*/
    printf(";n");
    printf("\end{tikzpicture}n");
    printf("\end{center}n");

    printf("\end{document}n");

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);
    else if (strcmp (argv [2], "t") == 0)
        print_tex (a);

return 0;
}

Da war ein Fehler, ich habe die Knoten falsch benannt. In LaTeX

Jetzt ist aber richtig

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = 0;
    }

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            if (b [i][j] != -1)
                a [i][b[i][j]] = 1;
    }

}

void read_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j, k;
    int ch = 0;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0, k = 0;  j < n-1;  j++) {
            scanf ("%c,", \&amp;ch);
            if (ch == ' ')
                b [i][j] = -1;
            else
                b [i][j] = ch - 'a';

        }
        scanf ("%cn", \&amp;ch);
        if (ch == ' ')
            b [i][j] = -1;
        else
            b [i][j] = ch - 'a';
    }
}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

void print_tex (int a [N][N]) {
    int i, j;
    int codez = 8;
    printf("\documentclass{article}n");
    printf("\usepackage[utf8]{inputenc}n");
    printf("\usepackage{pgf, tikz}n");
    printf("\usetikzlibrary{arrows , automata , positioning}n");
    printf("\begin{document}nn");

    printf("\begin{center}n");
    printf("\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]n");
    printf("%Knotenn");

    printf("\node (a) [state, thick] {a};n");
    printf("\node (b) [state, thick, right of= a, below of=a] {b};n");
    printf("\node (c) [state, thick, left of= a, below of=a] {c};n");
    printf("\node (d) [state, thick, right of= b, below of=b] {d};nn");
    printf("\node (e) [state, thick, left of= b, below of=b] {e};nn");
    printf("\node (g) [state, thick, left of=c, below of=c] {g};nn");

    printf("\node (f) [state, thick, below of=d] {f};nn");
    printf("\node (h) [state, thick, below of=e] {h};nn");
    printf("\node (i) [state, thick, below of=g] {i};nn");

    printf("\node (j) [state, thick, below of=f, left of=h] {f};nn");
    printf("\node (k) [state, thick, below of=h, right of=h] {h};nn");
    printf("\node (l) [state, thick, below of=h] {l};nn");

    printf("%Verbindungenn");
    printf("\path[thick,->]n");

    char *leftright [] = {"left", "right"};
    char *abovebelow [] = {"above", "below"};

    for (i = 0;  i < N;  i++) {
        for (j = 0;  j < N; j++) {
            if (a [i] [j] == 1)
                printf ("(%c) edge [bend angle=20] (%c)n", (char)('a' + i), (char)('a' + j));
        }
    }
    printf(";n");
    printf("\end{tikzpicture}n");
    printf("\end{center}n");

    printf("\end{document}n");

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);
    else if (strcmp (argv [2], "t") == 0)
        print_tex (a);

return 0;
}

Jetzt mache ich noch bögen bei den Edges

Image 437546935_1915165878933070_2356710304883732809_n

So, jetzt tut es, es sind nur zu viele Edges

Ich mache zwei Knoten weniger und tue die in der Mitte weg.

So ist schöner

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       12

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = 0;
    }

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            if (b [i][j] != -1)
                a [i][b[i][j]] = 1;
    }

}

void read_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j, k;
    int ch = 0;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0, k = 0;  j < n-1;  j++) {
            scanf ("%c,", \&amp;ch);
            if (ch == ' ')
                b [i][j] = -1;
            else
                b [i][j] = ch - 'a';

        }
        scanf ("%cn", \&amp;ch);
        if (ch == ' ')
            b [i][j] = -1;
        else
            b [i][j] = ch - 'a';
    }
}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

void print_tex (int a [N][N]) {
    int i, j;
    int codez = 8;
    printf("\documentclass{article}n");
    printf("\usepackage[utf8]{inputenc}n");
    printf("\usepackage{pgf, tikz}n");
    printf("\usetikzlibrary{arrows , automata , positioning}n");
    printf("\begin{document}nn");

    printf("\begin{center}n");
    printf("\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]n");
    printf("%Knotenn");

    printf("\node (a) [state, thick] {a};n");
    printf("\node (b) [state, thick, right of= a, below of=a] {b};n");
    printf("\node (c) [state, thick, left of= a, below of=a] {c};n");
    printf("\node (d) [state, thick, below of=b, right of=b] {d};nn");
    printf("\node (e) [state, thick, below of=c, left of=c] {e};nn");

    printf("\node (g) [state, thick, below of=d] {g};nn");
    printf("\node (f) [state, thick, below of=e] {f};nn");

    printf("\node (h) [state, thick, below of=g] {h};nn");
    printf("\node (i) [state, thick, below of=f] {i};nn");

    printf("\node (j) [state, thick, below of=h, right of=i] {j};nn");
    printf("\node (k) [state, thick, right of=j] {k};nn");
    printf("\node (l) [state, thick, right of=k] {l};nn");

    printf("%Verbindungenn");
    printf("\path[thick,->]n");

    char *leftright [] = {"left", "right"};
    char *abovebelow [] = {"above", "below"};

    for (i = 0;  i < N;  i++) {
        for (j = 0;  j < N; j++) {
            if (a [i] [j] == 1)
                printf ("(%c) edge [bend angle=20, bend left,below] (%c)n", (char)('a' + i), (char)('a' + j));
        }
    }
    printf(";n");
    printf("\end{tikzpicture}n");
    printf("\end{center}n");

    printf("\end{document}n");

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);
    else if (strcmp (argv [2], "t") == 0)
        print_tex (a);

return 0;
}

Ich lasse es jetzt so.

Jetzt habe ich die Zustännde minimiert, damit das nicht so unübersichtlich ist.

Image 438077996_1915157925600532_9052991816635663767_n

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       7

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = 0;
    }

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            if (b [i][j] != -1)
                a [i][b[i][j]] = 1;
    }

}

void read_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j, k;
    int ch = 0;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0, k = 0;  j < n-1;  j++) {
            scanf ("%c,", \&amp;ch);
            if (ch == ' ')
                b [i][j] = -1;
            else
                b [i][j] = ch - 'a';

        }
        scanf ("%cn", \&amp;ch);
        if (ch == ' ')
            b [i][j] = -1;
        else
            b [i][j] = ch - 'a';
    }
}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

void print_tex (int a [N][N]) {
    int i, j;
    int codez = 8;
    printf("\documentclass{article}n");
    printf("\usepackage[utf8]{inputenc}n");
    printf("\usepackage{pgf, tikz}n");
    printf("\usetikzlibrary{arrows , automata , positioning}n");
    printf("\begin{document}nn");

    printf("\begin{center}n");
    printf("\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]n");
    printf("%Knotenn");

    printf("\node (a) [state, thick] {a};n");
    printf("\node (b) [state, thick, right of= a, below of=a] {b};n");
    printf("\node (c) [state, thick, left of= a, below of=a] {c};n");
    printf("\node (d) [state, thick, below of=b, right of=b] {d};nn");
    printf("\node (e) [state, thick, below of=c, left of=c] {e};nn");

    printf("\node (g) [state, thick, below of=d, left of=d] {g};nn");
    printf("\node (f) [state, thick, below of=e, right of=e] {f};nn");

    printf("%Verbindungenn");
    printf("\path[thick,->]n");

    char *leftright [] = {"left", "right"};
    char *abovebelow [] = {"above", "below"};

    for (i = 0;  i < N;  i++) {
        for (j = 0;  j < N; j++) {
            if (a [i] [j] == 1)
                printf ("(%c) edge [bend angle=20, bend left,below] (%c)n", (char)('a' + i), (char)('a' + j));
        }
    }
    printf(";n");
    printf("\end{tikzpicture}n");
    printf("\end{center}n");

    printf("\end{document}n");

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);
    else if (strcmp (argv [2], "t") == 0)
        print_tex (a);

return 0;
}

Im nächsten Schritt mache ich Deep Search

Image 438161999_1915175318932126_2585185414281084042_n

Jetzt wende ich deep search an. Nicht für alle Knoten, sondern nur für einen. Von dem aus ich die Komponente mache. Ich mache eine Schlange.

Jetzt kommt Breitensuche, nicht Tiefensuche.

// Die Schlange habe ich jetzt - ich lasse es so weit. Ich tue es auf meine Homepage, das letzte alles. Und - dann gehe ich einkaufen, ich brauche was zu essen

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define N       7

int Q [1024];
int Qtop = 0;
int Qbottom = 0;

void put (int v) {
    Q [Qtop] = v;
    Qtop ++;
}

int get (void) {
    int v = Q [Qbottom];
    Qbottom++;
return v;
}

int QIsNotEmpty () {
    return (Qbottom >= Qtop);
}

void generate_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = rand () % 2;
    }
}

void print_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;

    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            printf ("%c,", a [i][j] + '0');
        }
        printf ("%cn", a [i][j] + '0');
    }
}

void read_csv_adjanzenzmatrix (int a [N][N], int n) {
    int i, j;
    int ch;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0;  j < n-1; j++) {
            scanf ("%i,", \&amp;ch);
            a [i] [j] = ch;
        }
        scanf ("%in", \&amp;ch);
        a [i] [j] = ch;
    }

}

void convert_csv_adjanzenzmatrix_to_adjazensliste (int a [N][N], int b [N][N], int n) {
    int i, j, k;

    for (i = 0;  i < n;  i++) {
        for (j = 0, k = 0;  j < n;  j++) {
            if (a [i][j] == 1) {
                b [i][k] = j;
                k++;
            }
        }
        for (; k < n;  k++)
            b [i][k] = -1;
    }

}

void convert_csv_adjanzenzliste_to_adjazensmatrix (int a [N][N], int b [N][N], int n) {
    int i, j;

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            a [i][j] = 0;
    }

    for (i = 0;  i < n;  i++) {
        for (j = 0;  j < n;  j++)
            if (b [i][j] != -1)
                a [i][b[i][j]] = 1;
    }

}

void read_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j, k;
    int ch = 0;

    scanf ("%c,", \&amp;ch);
    for (i = 0;  i < n-1;  i++)  {
        scanf ("%c,", \&amp;ch);
    }
    scanf ("%cn", \&amp;ch);

    for (i = 0;  i < n;  i++) {
        scanf ("%c,", \&amp;ch);
        for (j = 0, k = 0;  j < n-1;  j++) {
            scanf ("%c,", \&amp;ch);
            if (ch == ' ')
                b [i][j] = -1;
            else
                b [i][j] = ch - 'a';

        }
        scanf ("%cn", \&amp;ch);
        if (ch == ' ')
            b [i][j] = -1;
        else
            b [i][j] = ch - 'a';
    }
}

void print_csv_adjanzenzliste (int b [N][N], int n) {
    int i, j;
    printf ("%c,", ' ');
    for (i = 0;  i < n-1;  i++)
        printf ("%c,", i + 'a');
    printf ("%cn", i+'a');
    for (i = 0;  i < n;  i++) {
        printf ("%c,", i+'a');
        for (j = 0;  j < n-1;  j++) {
            if (b [i][j] != -1)
                printf ("%c,", b [i][j] + 'a');
            else
                printf (" ,");
        }
        if (b [i][j] != -1)
            printf ("%cn", b [i][j] + 'a');
        else
            printf (" n");
    }

}

void print_tex (int a [N][N]) {
    int i, j;
    int codez = 8;
    printf("\documentclass{article}n");
    printf("\usepackage[utf8]{inputenc}n");
    printf("\usepackage{pgf, tikz}n");
    printf("\usetikzlibrary{arrows , automata , positioning}n");
    printf("\begin{document}nn");

    printf("\begin{center}n");
    printf("\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]n");
    printf("%Knotenn");

    printf("\node (a) [state, thick] {a};n");
    printf("\node (b) [state, thick, right of= a, below of=a] {b};n");
    printf("\node (c) [state, thick, left of= a, below of=a] {c};n");
    printf("\node (d) [state, thick, below of=b, right of=b] {d};nn");
    printf("\node (e) [state, thick, below of=c, left of=c] {e};nn");

    printf("\node (g) [state, thick, below of=d, left of=d] {g};nn");
    printf("\node (f) [state, thick, below of=e, right of=e] {f};nn");

    printf("%Verbindungenn");
    printf("\path[thick,->]n");

    char *leftright [] = {"left", "right"};
    char *abovebelow [] = {"above", "below"};

    for (i = 0;  i < N;  i++) {
        for (j = 0;  j < N; j++) {
            if (a [i] [j] == 1)
                printf ("(%c) edge [bend angle=20, bend left,below] (%c)n", (char)('a' + i), (char)('a' + j));
        }
    }
    printf(";n");
    printf("\end{tikzpicture}n");
    printf("\end{center}n");

    printf("\end{document}n");

}

int main (int argc, char *argv []) {
    time_t t;
    int n = N;
    int a [N][N];
    int b [N][N];

    srand ((unsigned) time (\&amp;t));

    if (argc != 3) {
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");
        return 1;
    }
    if (strcmp(argv [1], "r") == 0) {
        read_csv_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "g") == 0) {
        generate_adjanzenzmatrix (a, n);
        convert_csv_adjanzenzmatrix_to_adjazensliste (a, b, n);
    }
    else if (strcmp (argv [1], "s") == 0) {
        read_csv_adjanzenzliste (b, n);
        convert_csv_adjanzenzliste_to_adjazensmatrix (a, b, n);
    }
    else
        printf ("Wrong Parameter!ng: generete generate_adjanzenzmatrixnr: read_csv_adjanzenzmatrixns: read_csv_adjanzenzlistennp: print_csv_adjanzenzmatrixnq: print_csv_adjanzenzliste");

    if (strcmp (argv [2], "p") == 0)
        print_csv_adjanzenzmatrix (a, n);
    else if (strcmp (argv [2], "q") == 0)
        print_csv_adjanzenzliste (b, n);
    else if (strcmp (argv [2], "t") == 0)
        print_tex (a);

return 0;
}
Image 438888166_1915178048931853_5373359482425407861_n

Image 438892310_1915166335599691_2441886019906164906_n