...
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, ...
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 (\&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
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 (\&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); printf ("%c,", ch); } scanf ("%cn", \&ch); printf ("%cn,", ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%c,", \&ch); a [i] [j] = ch - '0'; } scanf ("%cn", \&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 (\&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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 (\&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0, k = 0; j < n-1; j++) { scanf ("%c,", \&ch); if (ch == ' ') b [i][j] = -1; else b [i][j] = ch - 'a'; } scanf ("%cn", \&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 (\&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.
#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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0, k = 0; j < n-1; j++) { scanf ("%c,", \&ch); if (ch == ' ') b [i][j] = -1; else b [i][j] = ch - 'a'; } scanf ("%cn", \&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))\&\&((a [i]-MIN_STATE) != 3)], abovebelow [((i+1)<=a[i])\&\&(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)) \&\&((b [i]-MIN_STATE) != 3)], abovebelow [((i+MIN_STATE)>b [i])\&\&(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 (\&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0, k = 0; j < n-1; j++) { scanf ("%c,", \&ch); if (ch == ' ') b [i][j] = -1; else b [i][j] = ch - 'a'; } scanf ("%cn", \&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 (\&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
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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0, k = 0; j < n-1; j++) { scanf ("%c,", \&ch); if (ch == ' ') b [i][j] = -1; else b [i][j] = ch - 'a'; } scanf ("%cn", \&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 (\&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.
#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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0, k = 0; j < n-1; j++) { scanf ("%c,", \&ch); if (ch == ' ') b [i][j] = -1; else b [i][j] = ch - 'a'; } scanf ("%cn", \&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 (\&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
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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0; j < n-1; j++) { scanf ("%i,", \&ch); a [i] [j] = ch; } scanf ("%in", \&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,", \&ch); for (i = 0; i < n-1; i++) { scanf ("%c,", \&ch); } scanf ("%cn", \&ch); for (i = 0; i < n; i++) { scanf ("%c,", \&ch); for (j = 0, k = 0; j < n-1; j++) { scanf ("%c,", \&ch); if (ch == ' ') b [i][j] = -1; else b [i][j] = ch - 'a'; } scanf ("%cn", \&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 (\&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; }