quindi ho lavorato su questo programma e il suo obiettivo era usare la ricorsione e una matrice di adiacenza per trovare quanti percorsi possibili una persona poteva prendere per attraversare un sistema di metropolitana senza andare oltre un traccia più di una volta. Questo è stato auto esplicativo per me, ma ora mi sono perso sul programma 2 che è quello di fare lo stesso problema dal programma 1 in C++ e utilizzando tre classi e ricorsione. Le classi dovrebbero essere SubwaySystem, Station e Track. Non so davvero come procedere sulla transizione da una semplice matrice di adiacenza in tre classi? Sembra controproducente dal momento che sembra più complicato. Ci sto lavorando da un po 'e non riesco a utilizzare tutte e tre le classi.Come trasformare il programma C in classi
Quello che ho provato: il mio approccio è stato quello di creare 1 sistema di metropolitana con 12 stazioni e ogni stazione con una serie di tracce. Ad esempio, la stazione A ha una stazione alla quale può andare B. La stazione A ha una matrice di 12 tracce, ma solo una traccia è attivata. Comunque continuo ad andare agli errori da quando ho provato a inizializzare gli array nella classe Track e quindi li uso nella classe SubwaySystem. Quindi provare a utilizzare la ricorsione per ottenere tutti i percorsi possibili lo rende molto più difficile. Non so davvero come capirlo.
La matrice di adiacenza nel mio codice mappa praticamente l'intera connessione da una stazione all'altra. Le stazioni sono A - L corrispondenti a ciascuna riga/colonna. Non so come rappresentarlo in C++ senza utilizzando una matrice di adiacenza.
Il mio codice in C (programma 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;
}
}
}
}
Si desidera utilizzare un grafico, http://en.wikipedia.org/wiki/Graph_(data_structure), uno con nodi e spigoli piuttosto che una matrice di adiacenza. Le stazioni sono i tuoi nodi, le tracce sono i tuoi bordi, SubwaySystem è l'intero grafico. Una volta terminato, è possibile che l'implementazione del nodo/edge sia più pulita della matrice di adiacenza. –
Esistono molte soluzioni valide. Perché non è uno scelto? – aec