umwandelt, also habe ich an diesem Programm gearbeitet und sein Ziel war Rekursion und eine Adjazenzmatrix zu verwenden, um zu finden, wie viele mögliche Wege eine Person nehmen könnte, um durch ein U-Bahn-System zu kommen, ohne ein zu gehen track mehr als einmal. Das war für mich selbsterklärend, aber jetzt bin ich auf Programm 2 verloren, das das gleiche Problem von Programm 1 in C++ und drei Klassen und Rekursion zu tun hat. Die Klassen sollen SubwaySystem, Station und Track sein. Ich weiß nicht wirklich, wie ich von einer einfachen Adjazenzmatrix in drei Klassen übergehen soll. Es scheint kontraproduktiv, da es komplizierter erscheint. Ich arbeite seit einiger Zeit daran und weiß, dass ich nicht alle drei Klassen nutzen kann.Wie man C Programm in Klassen
Was ich versucht habe: Mein Ansatz war ich 1 Subway System mit 12 Stationen und jede Station mit einer Reihe von Tracks erstellt. Zum Beispiel hat Station A eine Station, zu der B gehen kann. In Station A gibt es eine Anordnung von 12 Spuren, aber nur eine Spur ist aktiviert. Ich laufe jedoch immer wieder auf Fehler, seit ich versucht habe, die Arrays in der Track-Klasse zu initialisieren und sie dann in der SubwaySystem-Klasse zu verwenden. Der Versuch, die Rekursion zu verwenden, um alle möglichen Routen zu erhalten, macht es viel schwieriger. Ich weiß wirklich nicht, wie ich das herausfinden soll.
Die Adjazenzmatrix im my-Code bildet ziemlich genau die gesamte Verbindung von Station zu Station ab. Die Stationen sind A - L, die jeder Reihe/Spalte entsprechen. Ich weiß nicht, wie ich dies in C++ ohne unter Verwendung einer Adjazenzmatrix darstellen soll.
Mein Code in C (Programm 1):
#include <stdio.h>
void routesFinder(int row, int col);
char station[13] = "ABCDEFGHIJKL";
char order[25] = "A";
int subway[12][12] = {{0,1,0,0,0,0,0,0,0,0,0,0},
{1,0,1,1,1,1,0,0,0,0,0,0},
{0,1,0,0,1,0,0,0,0,0,0,0},
{0,1,0,0,1,0,0,0,0,0,0,0},
{0,1,1,1,0,0,1,1,0,0,0,0},
{0,1,0,0,0,0,0,1,0,0,0,0},
{0,0,0,0,1,0,0,0,0,0,1,0},
{0,0,0,0,1,1,0,0,1,1,1,0},
{0,0,0,0,0,0,0,1,0,0,1,0},
{0,0,0,0,0,0,0,1,0,0,1,0},
{0,0,0,0,0,0,1,1,1,1,0,1},
{0,0,0,0,0,0,0,0,0,0,1,0}};
int paths = 0, i = 1;
int main(){
routesFinder(0, 0); //start with first station row, first column
printf("\n%d days before repeating a route.\n", paths);
return 0;
}
void routesFinder(int row, int col) {
while (col < 12) { //go through columns of a row
if (subway[row][col] == 0) { // if no station is found in row
if (row == 11) { // station found
paths++;
printf("Route %d: %s.\n", paths, order);
return;
}
col++;
if (row != 11 && col == 12) { //backtracking from deadend
return;
}
}
if (subway[row][col] == 1) {
order[i] = station[col]; //add station to route
i++; //increment, prepare for next route
subway[row][col] = 0; //no track forward
subway[col][row] = 0; // or backward
routesFinder(col, 0); //recursion, look for path in new row
order[i] = '\0'; //remove route
i--; //decrement, prepare for next route
subway[row][col] = 1; //restore path
subway[col][row] = 1; // restore path
col++; //returning from deadend, check for next open path
if (row != 11 && col == 12) { //return from deadend
return;
}
}
}
}
Sie möchten ein Diagramm verwenden, http://en.wikipedia.org/wiki/Graph_(data_structure), eines mit Knoten und Kanten anstelle einer Adjazenzmatrix. Stationen sind deine Knoten, Spuren sind deine Kanten, SubwaySystem ist dein gesamter Graph. Wenn Sie fertig sind, finden Sie möglicherweise die Knoten-/Kantenimplementierungs-Cleaner als die Adjazenzmatrix. –
Es gibt viele praktikable Lösungen. Warum ist niemand ausgewählt? – aec