https://soi.ch/wiki/dfs/
https://www.studysmarter.de/schule/info ... efensuche/
...
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
https://www.math.uni-hamburg.de/home/sc ... ien-05.pdf
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, ...
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-1.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-2.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/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össer, das ist logsich und sie hat die Grösse/Kardinalität 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ät, so
Geordnete Stichproben oder ungeordnet. Ohne zurücklegen.. 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ücklegen
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ären. 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
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-1.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-2.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-3.jpg)
Es hat natürlich nur der vollständige Graph, die Kantenmenge (V chr 2)
natürlich 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össer 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ängender Graph
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-1.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-2.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/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ächlich sind dies die entscheidenden Graphen und führen zu einer Charakterisierung planarer Graphen, die als Kuratowski-Theorem bekannt ist. Kasimir Kuratowski fragte Frank Haray einmal nach dem Ursprung der Notation für K_5 und K_{3,3}. Haray antwortete: „Das K in K_5“ steht für Kasimir und das K in K_{3,3} steht für 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.
Über die Kanten E
E := {(1,2)(1,3),..}
Ist der Graph vollständig 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önnten jetzt haben:
E' := {{1,2}}
während V' := {1,2,3} ist. Dann ist das trotzdem untermenge. Aber nicht induziert
Und zusammenhängend, heisst, dass es einen u-v-Weg gibt
Jetzt muss ich aufhören, das ist urheberrechtlich geschützt
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ützt, 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ür Tiefensuche und sie brauchen Induzierte Teilgraph für Komponente
Eine Komponente ist einfach eine Telmenge, aber die mit dem längsten 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ängend, wenn es denn so ist, deswegen ist das eine Komponente.
Aber halt, das stimmt nicht, es ist der maximalst längste Teilgraph, der maximalst längste
Der maximal längste Weg - der in einem Graphen möglichs ist
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-1.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/graph-2.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/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änden, 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ägen
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char *argv []) {
time_t t;
srand ((unsigned) time (&t));
return 0;
}
Code: Alles auswählen
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
Code: Alles auswählen
Ich mache zu erst das hier
Rechne die Zahl in IEEE-754 um 9513.512695
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_123947.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125543.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125547.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125552.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125553.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125557.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125601.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_125608.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_130859.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_130902.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_184550.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_185040.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_185045.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_185450.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_185752.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_190005.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_190228.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_190539.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_194432.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_195115.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_195901.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_200311.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_200713.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_203421.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_203425.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_204857.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240424_205434.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_093126.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_093549.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_094014.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_094338.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_105623.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_105627.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_105906.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_110059.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_110313.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_110512.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_232700.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/IMG_20240425_232707.jpg)
Ich lerne jetzt weiter. Ich lerne den Algorithmus für 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äher. Ich brauche die Tiefensuche, das ist das wichtigste.
Nein, Entschuldigung, für 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önnnte man sagen, es muss abfragen, um zu verstehen, was bei den anderen steht, dann funktioniert es.
Sie werden es am Ende sehen, auch für sie ist etwas dabei - KI nämlich mit Kmeans - also ich mag Automaten, aber sie werden es lieben. Und dann können sie über 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änden haben sie
z1 | z4 z5 z7 z12
Das sind die Folgezustände. Der Unterschied zum gewöhnlichen Graphen, ist das zustände 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, überall
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üssen bei dem Algorithmus ja aufpassen Wenn wir jedes Element von jedem untersuche, dann werden wir eine Endlosschleife fabrizieren
Gut - also müssen wir uns den Vorgänger merken
Und was ist der Vorgänger?
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änger
Und den Vorgänger speichern wir. Das auf jeden Fall.
Jetzt, wir gehen alle w durch und der Vorgänger ist v
Der Vorgänger von w ist v
Und deswegen speichern wir
pred [w] := v
Dann ist zu w, der Vorgänger v gespeichert
Das heisst, jedes Mal, wenn wir w begegnen und der Vorgänger v ist - jetzt kommt der Witz. Jetzt lassen wir es
Wenn wir noch mal w begegnen und der Vorgänger ist gegeben, dnan wird das nicht noch mal besucht
deswegen
if pred [w] == None:
Also, wenn der Vorgänger 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änger von w leer ist
Wenn er das ist, dann speichern wir beim Vorgänger
v, das ist er ja.
Und jetzt kommt Q.Append (w)
Weil wir hängen w an die Schlange an.
Wenn wir das so sehen, dann haben wir w an die Schlange angängt. Also, nur, wenn das nicht schon besucht wurde. Dann wird w
Q.Append (w)
angehängt. Gut, das ist jetzt mit der Liste
Damit ist garantiert, dass w besucht wird
Ausser, dass w schon besucht wurde, weil der Vorgänger 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ürde ich sagen
component [w] = component [v]
Das heisst, für 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üssen, wir könnnten 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öne komponente raus kommmt.
Jetzt mache ich was anderes - jetzt mache ich einen Datenabgleich
Ich denke, der Hauptteil von dem Gerüst, sitzt jetzt - also von der Wirbelsäule, 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ätzen
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önnen und es wird eine TeX Datei für einen Graphen daraus machen können.
Code: Alles auswählen
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:~$
Code: Alles auswählen
// 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 ("%c\n", 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 ("%c\n", 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;
}
Code: Alles auswählen
,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
Code: Alles auswählen
,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
Code: Alles auswählen
// 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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &ch);
printf ("%c\n,", 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 ("%c\n", &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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\n");
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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\n");
print_csv_adjanzenzmatrix (a, n);
return 0;
}
Code: Alles auswählen
#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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", 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 ("%c\n", 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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;
}
Code: Alles auswählen
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:~$
Code: Alles auswählen
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:~$
Code: Alles auswählen
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.
Code: Alles auswählen
#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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", &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 ("%c\n", &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 ("%c\n", 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 ("%c\n", 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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;
}
Code: Alles auswählen
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.
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/437135585_1915179012265090_4831882553316332655_n.jpg)
Code: Alles auswählen
#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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", &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 ("%c\n", &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 ("%c\n", 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 ("%c\n", 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}\n\n");
printf("\\begin{center}\n");
printf("\\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]\n");
printf("\%Knoten\n");
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};\n\n");
printf("\\node (e) [state, thick, left of= b, below of=b] {e};\n\n");
printf("\\node (g) [state, thick, left of=c, below of=c] {g};\n\n");
printf("\\node (f) [state, thick, below of=d] {f};\n\n");
printf("\\node (h) [state, thick, below of=e] {h};\n\n");
printf("\\node (i) [state, thick, below of=g] {i};\n\n");
printf("\\node (f) [state, thick, below of=f, left of=h] {f};\n\n");
printf("\\node (h) [state, thick, below of=h, right of=h] {h};\n\n");
printf("\\node (i) [state, thick, below of=h, left of=h] {i};\n\n");
printf("\%Verbindungen\n");
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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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 ist aber richtig
Code: Alles auswählen
#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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", &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 ("%c\n", &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 ("%c\n", 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 ("%c\n", 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}\n\n");
printf("\\begin{center}\n");
printf("\\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]\n");
printf("\%Knoten\n");
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};\n\n");
printf("\\node (e) [state, thick, left of= b, below of=b] {e};\n\n");
printf("\\node (g) [state, thick, left of=c, below of=c] {g};\n\n");
printf("\\node (f) [state, thick, below of=d] {f};\n\n");
printf("\\node (h) [state, thick, below of=e] {h};\n\n");
printf("\\node (i) [state, thick, below of=g] {i};\n\n");
printf("\\node (j) [state, thick, below of=f, left of=h] {f};\n\n");
printf("\\node (k) [state, thick, below of=h, right of=h] {h};\n\n");
printf("\\node (l) [state, thick, below of=h] {l};\n\n");
printf("\%Verbindungen\n");
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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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;
}
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/437546935_1915165878933070_2356710304883732809_n.jpg)
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
Code: Alles auswählen
#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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", &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 ("%c\n", &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 ("%c\n", 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 ("%c\n", 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}\n\n");
printf("\\begin{center}\n");
printf("\\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]\n");
printf("\%Knoten\n");
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};\n\n");
printf("\\node (e) [state, thick, below of=c, left of=c] {e};\n\n");
printf("\\node (g) [state, thick, below of=d] {g};\n\n");
printf("\\node (f) [state, thick, below of=e] {f};\n\n");
printf("\\node (h) [state, thick, below of=g] {h};\n\n");
printf("\\node (i) [state, thick, below of=f] {i};\n\n");
printf("\\node (j) [state, thick, below of=h, right of=i] {j};\n\n");
printf("\\node (k) [state, thick, right of=j] {k};\n\n");
printf("\\node (l) [state, thick, right of=k] {l};\n\n");
printf("\%Verbindungen\n");
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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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 habe ich die Zustännde minimiert, damit das nicht so unübersichtlich ist.
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/438077996_1915157925600532_9052991816635663767_n.jpg)
Code: Alles auswählen
#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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", &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 ("%c\n", &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 ("%c\n", 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 ("%c\n", 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}\n\n");
printf("\\begin{center}\n");
printf("\\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]\n");
printf("\%Knoten\n");
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};\n\n");
printf("\\node (e) [state, thick, below of=c, left of=c] {e};\n\n");
printf("\\node (g) [state, thick, below of=d, left of=d] {g};\n\n");
printf("\\node (f) [state, thick, below of=e, right of=e] {f};\n\n");
printf("\%Verbindungen\n");
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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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;
}
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/438161999_1915175318932126_2585185414281084042_n.jpg)
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.
Code: Alles auswählen
// 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 ("%c\n", 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 ("%c\n", 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 ("%c\n", &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 ("%i\n", &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 ("%c\n", &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 ("%c\n", &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 ("%c\n", 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 ("%c\n", 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}\n\n");
printf("\\begin{center}\n");
printf("\\begin{tikzpicture}[>=stealth',shorten >=1pt,auto,node distance=2.5cm]\n");
printf("\%Knoten\n");
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};\n\n");
printf("\\node (e) [state, thick, below of=c, left of=c] {e};\n\n");
printf("\\node (g) [state, thick, below of=d, left of=d] {g};\n\n");
printf("\\node (f) [state, thick, below of=e, right of=e] {f};\n\n");
printf("\%Verbindungen\n");
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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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_adjanzenzmatrix\nr: read_csv_adjanzenzmatrix\ns: read_csv_adjanzenzliste\n\np: print_csv_adjanzenzmatrix\nq: 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;
}
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/438888166_1915178048931853_5373359482425407861_n.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/438892310_1915166335599691_2441886019906164906_n.jpg)
![Bild](https://www.ituenix.de/nextcloud/data/dave/files/440479773_1915168958932762_1717074657808842807_n.jpg)