Certo. La tua scacchiera (o le celle non bloccate) formano un grafico , dove ogni cella è un vertice del grafico, e ogni movimento di cavaliere consentito da un nodo all'altro definisce un bordo. Il percorso più breve per il cavaliere può quindi essere trovato da una semplice ricerca in ampiezza .
Per implementare questo, utilizzare un array intero 2D per rappresentare la griglia. Basta assegnare il valore zero alla cella iniziale, quindi determinare tutte le celle raggiungibili con una mossa da lì e contrassegnarle con 1, quindi eseguire il ciclo attraverso tutte le 1 celle, determinare tutte le celle raggiungibili con una mossa da quelle non visitate prima e contrassegnarle con "2", e così via, fino a raggiungere il nodo finale (n, m). Avrai bisogno di alcuni valori speciali che indicano celle e celle bloccate non visitate fino ad ora.
Per ottenere il percorso finale dall'array 2D, avviare una ricerca su (n, m). Diciamo che questa cella ha il numero k, quindi cerca un vicino di trasloco cavalieri con valore k-1, quindi da lì per un vicino con valore k-2, e così via. Questo produrrà il percorso che stavi cercando in ordine inverso.