Per il mio incarico C++, sto praticamente cercando di cercare attraverso un pezzo di testo in un file di testo (che viene trasmesso al mio vettore vec
) a partire dal secondo personaggio in alto a sinistra. È per un labirinto di testo, dove il mio programma alla fine dovrebbe stampare i personaggi per un percorso attraverso di esso.Algoritmo per stampare su schermo percorso (s) attraverso un labirinto di testo
Un esempio di un labirinto sarebbe come:
###############
Sbcde####efebyj
####hijk#m#####
#######lmi#####
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
###############
Dove '#' è un muro unwalkable e si comincia sempre al secondo carattere in alto a sinistra. I caratteri alfabetici rappresentano quadrati percorribili. Le uscite sono SEMPRE sulla destra. Il labirinto ha sempre una dimensione 15x15 in un file maze.text. I caratteri alfabetici si ripetono nello stesso labirinto, ma non direttamente l'uno accanto all'altro.
Quello che sto cercando di fare qui è: se un quadrato accanto a quello attuale ha un carattere alfabetico, aggiungilo al vettore vec
, e ripeti questo processo fino a quando non arrivo alla fine del labirinto. Alla fine, dovrei renderlo più complicato stampando sullo schermo più percorsi che esistono in alcuni labirinti.
Finora ho questo per lo stesso algoritmo, che so che è sbagliato:
void pathcheck()
{
if (isalpha(vec.at(x)) && !(find(visited.begin(), visited.end(), (vec.at(x))) != visited.end()))
{
path.push_back(vec.at(x));
visited.push_back(vec.at(x));
pathcheck(vec.at(x++));
pathcheck(vec.at(x--));
pathcheck(vec.at(x + 16));
pathcheck(vec.at(x - 16));
}
}
visited
è la mia tenuta vettore traccia delle piazze visitati.
Come aggiornarlo in modo che funzioni effettivamente, e alla fine così posso gestire più di un percorso (vale a dire se ci fossero 2 percorsi, il programma stamperebbe sullo schermo entrambi)? Ricordo che mi è stato detto che potrei aver bisogno di un altro vettore/array che tenga traccia dei quadrati che ho già visitato/controllato, ma come potrei implementarlo esattamente qui?
Avrete bisogno di ricordare dove siete stati, così non lo controllate più. Altrimenti verrebbe costantemente fatto un passo indietro, e nessuno andrà troppo lontano ... –
Aggiornato. Ma so che il mio vec.at nelle chiamate ricorsive è sbagliato ... cosa dovrei mettere? – forthewinwin
Stai anche verificando che non esci dall'area del labirinto 15x15? –