Dann bleibt das Problem unerreichbarer Zustände. Damit das nicht passiert, kann man für jeden Folgezustand einen Zähler einrichten. Am Ende müssen alle mindestens 1 sein. Damit jeder Zustand ein Mal erreicht wird.
Das müssen wir aber gar nicht fällt mir auf. Schlimm sind keine Zustände oder Knoten oder Ecken, die nicht erreicht werden. Schlimm sind verweiste Zustände. Ein Verweister Zustand ist ein Zustand, auf den weder andere verweisen, noch dass dieser auf andere verweist. Das kann allerdings dann eintreten, wenn für beide Eingaben der Folgezustand er selber ist. Und kein anderer Knoten auf diesen Zustand verweist.
Hier ist das besagt, unerwünschte gleich mal eingetreten
https://davidvajda.de/david4/2024-01-24/test4.pdf
https://davidvajda.de/david4/2024-01-24/test4.text
Hier dafür um so besser
https://davidvajda.de/david4/2024-01-24/test5.pdf
https://davidvajda.de/david4/2024-01-24/test5.tex
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define EMPTY_Z -1
#define UNINIT_Z -2
int main (void) {
time_t t;
int i, j;
int z [4][4];
int v;
int k, l;
int n;
srand ((unsigned)time (&t));
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
z [i][j] = j;
}
for (n = rand () % 100; n >= 0; n--) {
for (i = 0; i < 4; i++) {
if ((rand () % 2) == 0) {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[i][l] > z[i][k]) {
t = z [i][l];
z [i][l] = z[i][k];
z [i][k] = t;
}
}
}
}
else {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[i][l] < z[i][k]) {
t = z [i][l];
z [i][l] = z[i][k];
z [i][k] = t;
}
}
}
}
}
for (j = 0; j < 4; j++) {
if ((rand () % 2) == 0) {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[l][j] > z[k][j]) {
t = z [l][j];
z [l][j] = z[k][j];
z [k][j] = t;
}
}
}
}
else {
for (k = 0; k < 4; k++) {
for (l = k + 1; l < 4; l++) {
if (z[l][j] < z[k][j]) {
t = z [l][j];
z [l][j] = z[k][j];
z [k][j] = t;
}
}
}
}
}
}
/*
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
printf ("%i ", z[i][j]);
printf ("\n");
}
printf ("Zustand\tEingabe\tAusgabe\tFolgezustand\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
printf ("%i\t\t%i\t\t%i\t\t%i\n", i, j, rand () % 4, z[i][j]);
}*/
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 (0) [state, thick] {0};\n");
printf("\\node (1) [state, thick, right of= 0] {1};\n");
printf("\\node (2) [state, thick, right of= 1] {2};\n");
printf("\\node (3) [state, thick, below of= 1] {3};\n\n");
printf("\%Verbindungen\n");
printf("\\path[thick,->]\n");
for (i = 0; i < 4; i++) {
j = 0;
if (z [i][j] == i)
printf ("(%i) edge [loop above] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
else
printf ("(%i) edge node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
j = 1;
if (z [i][j] == i)
printf ("(%i) edge [loop] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
else
printf ("(%i) edge [bend angle=15, bend left,below] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
/*j = 2;
if (z [i][j] == i)
printf ("(%i) edge [loop] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
else
printf ("(%i) edge [bend angle=15, bend right,below] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
j = 3;
if (z [i][j] == i)
printf ("(%i) edge [loop] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);
else
printf ("(%i) edge [bend angle=15, bend left,above] node {%i/%i} (%i)\n", i, j, rand () % 4, z[i][j]);*/
}
/*
printf("(1) edge node {1/0} (2)\n");
printf("(1) edge [bend angle=15, bend left] node {0/0} (4)\n\n");
printf("(2) edge [bend angle=15, bend left,pos=0.4] node {0/0}(3)\n");
printf("(2) edge node {1/0} (4)\n\n");
printf("(3) edge [bend angle=15, bend left,below] node {0/0} (2)\n");
printf("(3) edge [bend angle=35, bend right, above] node {1/0} (1)\n\n");
printf("(4) edge [right] node {1/0} (3)\n");
printf("(4) edge [bend angle=15, bend left] node {0/0} (1)\n");*/
printf(";\n");
printf("\\end{tikzpicture}\n");
printf("\\end{center}\n");
printf("\\end{document}\n");
return 0;
}