Vorrei scrivere un algoritmo in grado di attraversare un grafico e, auspicabilmente, in seguito, posso implementarlo per un sistema di navigazione interno. Il grafico proviene da piante di un edificio e i nodi grafici rappresentano gli oggetti dell'edificio come porte, corridoi, scale, stanze, ecc.
Il sistema di navigazione accetterà utenti diversi con capacità diverse, queste funzionalità sono memorizzate nel profilo utente. Per ogni singolo utente (o un gruppo di utenti dello stesso tipo, ad esempio un membro dello staff), il sistema restituisce un percorso specifico per quell'utente / i considerando la sua funzionalità personale. Ad esempio, se l'utente del sistema sta utilizzando una sedia a rotelle, il sistema dovrebbe escludere tutti i nodi delle scale dal percorso (saranno contrassegnati come non attraversabili). Allo stesso modo se per entrare in uno spazio interno, l'utente deve avere una chiave o essere un membro dello staff, ma NON lo è, il sistema dovrebbe contrassegnare il nodo (es. La porta che richiede la chiave) non-traversabile e dovrebbe cercare quei percorsi che non richiedono questi requisiti specifici.
Questa è stata la prima parte e qui utilizzo una funzione per verificare queste condizioni per un determinato utente. Gli input per questa funzione sono un nodo e un utente. Se le condizioni richieste dal nodo NON sono soddisfatte (significa che il profilo utente non corrisponde alla condizione richiesta dal nodo) la funzione restituisce false = non-traversable. Se la condizione è vera, il nodo rimane inversibile e verrà memorizzato da qualche parte e verrà preso in considerazione per il calcolo del percorso finale.
La seconda parte è che ho una lista che contiene tutti i nodi che sono attraversabili e ora il percorso più breve sarà calcolato sulla base di 3 diversi costi, energia, tempo e denaro. Il costo finale può essere una combinazione di questi costi e imposta i pesi per i bordi.
Il mio problema riguarda la prima parte. Voglio sapere come posso creare un algoritmo che produce il sottografo (la lista con i nodi percorribili in esso). E in seguito come posso usare questo algoritmo per modificare Dijkstra per adattarlo a questo sistema.
Qualcuno può aiutare con la scrittura di uno pseudocodice per l'algoritmo in modo che io possa capire come funzionerebbe in passi chiari o qualche suggerimento su come posso fare questi passaggi in pseudocodice?
Tieni presente che in questa fase le prestazioni non sono molto importanti per me.