Może by tak:
- tworzysz typ wyliczeniowy kierunku
enum course {
DOWN,
RIGHT,
UP,
LEFT
};
Tworzysz zmienną tego typu i ustawiasz na DOWN.
- tworzysz zmienne przechowujące współrzędne bieżącego elementu tablicy (int) i ustawiasz obie na kolumnę na 0, a rząd na -1. (wyrówna się przy pierwszym obiegu pętli do 0)
(W tym momencie masz założenia początkowe, tj. zaczynasz z lewego górnego rogu idąc w dół.)
- pętla
-- dodaj/odejmij 1 do współrzędnych bieżącego zgodnie z zapisanym kierunkiem.
(zaraz po wejściu uzyskamy więc [0;0]) /1
-- uzupełniasz komórkę.
-- jeżeli należy zmienić kierunek, to zmień. /2
-- wyjdź z pętli, jeżeli uzupełniłeś wszystko. /3
- w tym miejscu masz gotową tablicę.
/1:
Tu nie powinno być problemu. Np. jeżeli ustawiono RIGHT to dodajesz do współrzędnej x +1.
/2:
Zakładam, że "wirujesz" w kierunku przeciwnym do wskazówek zegara.
Sprawdzasz czy w następnej komórce coś jest. Jeżeli jest pusta to nic nie robisz, jeżeli jest wypełniona to zakręcasz DOWN->RIGHT->UP->LEFT->DOWN.
/3:
Po prostu: Jeżeli mimo skręcenia w /2 następna jest zajęta, to oznacza, że wypełniono wszystkie.
vv<<<<
v>>>X^
>>>>>^
Powyżej 'X' to komórka spełniająca ten warunek: doszło do zakrętu (w górę), lecz mimo to trafia na uzupełnioną komórkę.
Sprawdzając czy uzupełnia poprawnie, nie losuj, tylko wstawiaj kolejne liczby ;)