Zależy jak ktoś podejdzie do problemu
nospor. Jeśli ktoś zechce być full OOP to wywołania pojedynczych metod przetykane konstruktorami, destruktorami, potrzebne do załadowania plików (chyba stąd zaznaczono by był to jeden i "zlikwidować" ten problem) dadzą o sobie znać niestety. Najszybciej tutaj dla najbardziej zakręconych przypadków (spiralne) będzie posłużyć się zwykłymi macierzami. Deklaracja odpowiedniej rozmiarowo macierzy i jazda w pętli z wypełnieniem tego.
Jak ja widzę rozwiązanie spirali? Wystarczy, że ktoś zauważy jak zmieniają się indeksy "rogowe" i ma sprawę pozamiataną niemal. Drugie spostrzeżenie to zauważenie warunku stopu. Przykład?
5 wierszy, 9 kolumn:
1 ruch - pola macierzy (0, 0) -> (0, 8)
2 ruch - pola macierzy (0, 8) -> (4, 8)
3 ruch - pola macierzy (4, 8) -> (4, 0)
4 ruch - pola macierzy (4, 0) -> (1, 0)
5 ruch - pola macierzy (1, 0) -> (1, 7)
6 ruch - pola macierzy (1, 7) -> (3, 7)
7 ruch - pola macierzy (3, 7) -> (3, 1)
8 ruch - pola macierzy (3, 1) -> (2, 1)
9 ruch - pola macierzy (2, 1) -> (2, 6)
Spójrzcie na cykle kolumn i wierszy zależne od tego czy lecimy po wierszach czy też kolumnach. robi się fajny cykl zmiennego dodawania i odejmowania o wciąż zmieniającej się liczbie dążącej do 0. najszybciej zauważalne to ruchy parzyste akurat w tym przypadku. 0-4-1-3-2-STOP i przypatrzcie zmienności: 0+4-3+2-1+0

Jak spostrzec kiedy zatrzymać? Sprawdzajcie ile w jednym ruchu pól wypełniono lub kontrolujcie spostrzeżenie powyżej aż dojdzie do 0. Drugi przypadek omówiłem wyżej, pierwszy macie niżej...
1 ruch -> 8(!)
2 ruch -> 4
3 ruch -> 8
4 ruch -> 3
5 ruch -> 7
6 ruch -> 2
7 ruch -> 6
8 ruch -> 1
9 ruch -> 5
Jaka suma? 44. Ile 5*9? 45. Gdzie zgubiono 1? To startowe pole (0,0). Dlatego zaznaczyłem w pierwszym ruchu 8, bo tyle "kosztuje" przejście z pola (0,0) do (0,8), ale powinno się doliczyć jeszcze (0,0) jako startowe. Dobry algorytm pozwoli szybko nawet dla dużych rozmiarowo macierzy wypełnić pola. To pisane na szybko, ale moim zdaniem sensowniejsze niż wyliczanie algorytmami zawartości każdego pola z osobna. Tutaj wypełniamy zakresy "hurtem". Jak by nie patrzeć pamięci dla dużych wymiarowo macierzy się zużyje masę, ale I tak powinno to być szybsze niż wyliczanie dla każdego indeksu macierzowego.