Das neue Auswendig lernen und die neuen Übungen - 0003

Benutzeravatar
davidvajda.de
Site Admin
Beiträge: 1488
Registriert: Di Jul 18, 2023 8:36 pm
Wohnort: D-72072, Tübingen
Kontaktdaten:

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

Beitrag von davidvajda.de »

Tiefen und Breitensuche:

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

Bild

Bild


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

Bild

Bild


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

Bild

Bild


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

Bild

Bild


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

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

Bild

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;
}
Jetzt schreibe ich das Programm so, dass es sie einliesst.

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

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;
}
Da war ein Fehler, ich habe die Knoten falsch benannt. In LaTeX

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;
}
Jetzt mache ich noch bögen bei den Edges



Bild

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;
}
Ich lasse es jetzt so.

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

Bild

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;
}
Im nächsten Schritt mache ich Deep Search

Bild

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

Bild

Bild
Antworten