Może w ten sposób:
Wybieramy punkt początkowy (x,y), np. (1,1) i ustawiamy go jako np. "obecny punkt w którym się znajdujemy". Sprawdzamy czy na pozycjach obok niego, czyli możliwych ruchach, czyli: (1+x, y) lub (x, y+1) lub (x-1, y) lub (x, y-1) leży jakiś punkt i sprawdzamy jednocześnie czy punkt który otrzymamy jest równy naszemu punktowi końcowemu. Jeśli tak jest, to mamy koniec algorytmu. Jeśli nie, to sprawdzamy czy na którymś z tych czterech możliwych do otrzymania ruchów leży kolejna kropka. Jeśli nie, to mamy po zadaniu, mamy brak dalszych ruchów. Jeśli leży tak jak w Twoim przykładzie i jest nią punkt (1,2) to przypisujemy zmiennej "obecny punkt w którym się znajdujemy" te właśnie wartości (1,2). Potem deklarujemy, że nie będzie możliwy powrót do punktu (1,1), czyli: jeśli (x, y+1) == "punkt_znajdujący_się_na_osi to --> przy następnym sprawdzaniu możliwych ruchów nie bierzemy pod uwagę ruchu (x, y-1). Dodatkowo zapamiętujemy, które kropki były już sprawdzane. Jest to warunek konieczny, bo jeśli kropki będą ustawione w kwadracie jedna obok drugiej to jedna będzie ciągle znajdować tę samą.
Dalej mamy powtarzanie się tych czynności aż do momentu, kiedy znajdziemy kropkę końcową lub tak jak w Twoim przykładzie, dojdziemy do kropki (2,3) i okaże się, że po sprawdzeniu ruchów (1+x, y) lub (x, y+1) lub (x, y-1) nie znajdziemy żadnej kropki lub tą, po której się poruszaliśmy już wcześniej.