Задача "Knight's tour!"
Здравейте,
не знам кои от вас знаят за тази задача,понеже е доста популярна!Ако някой не я знае, задачата е следната "напишете програма която по зададени координати на поле в шахматна дъска с размери NxN (N също е параметър на програмата) намира (чрез рекурсия) дали има път през който може да мине един шахматен кон, за да обиколи цялата дъска. Конят няма право да стъпва повторно на никое поле."
Въпросът е ,че би трябвало,да съм решил задачата,но не ми ми дава отговор (става като безкраен цикъл и не иска да излезе от рекурсията),когато въведа дъската да е по-голяма от 7X7.При по малките размери ми дава правилен отговор!
Това е кодът ми https://github.com/Angeld55/exercise/blob/master/KnightsTour.cs
Ако някой има идея как да го оптимизирам,ще съм много благодарен !
Ванка,благодаря ти много за реакцията :) ! Ще се опитам да го измисля,въпреки че не е сигурно дали ще стане ,понеже като се стига до квартаче X,Y се стига от друго място, съответно и има различни изходи от тази точка и различен брои вариянти от къде да мине !Но ще го измисля, благодаря ти :)!
Когато си на [x,y] и има N на брой възможности - изчисли ги. Докато ги изчисляваш, ти си маркирал полето като визитед, т.е. няма да стъпиш обратно на [x,y] и няма да зациклиш, което е ОК. Като ги изчислиш всичките възможности - запиши че си ги изчислил.
Ако да речем от [x,y] можеш да отидеш на [n,m] и на [a,b], а от [n,m] можеш да отидеш на [u,v] и [w,z], а пък от [a,b] на [i,j] и толкоз, запиши тези възможности.
Защото после като хитнеш [x,y] от някъде другаде, трябва да го знаеш това. Нещо повече. Ако хитнеш от някъде другаде [n,m] трябва да знаеш, че може да отиде до [u,v] и [w,z] без да ги изчисляваш отново.
Опитах се да нарисувам примерна ситуация: