![]() |
![]() |
| Проект "Пампасы"
посвящен
жизни друзей-слонов. Здесь будут отражены редкие
фотофакты, достоверность и правдивость комментариев к которым будут
лежать на совести их создателей. Основная цель проекта - создание
единого информационного пространства территориально значительно
разнесённых ареалов обитания Больших, Сильных и Добрых, а также
отражение в наглядной форме наиболее замечательных событий из жизни
последних. |
| Incubus
(c)
2006 |
| -- Created on 22.05.2010 by
INCUBUS procedure domino_sol is type t_rec is record (dom varchar2(20), usage number, sign varchar2(20)); type t_tbl is table of t_rec index by binary_integer; l_list t_tbl; type t_rec1 is record (pos number, sign varchar2(20)); type t_tbl1 is table of t_rec1; l_res t_tbl1 := t_tbl1(); l_succ boolean := false; procedure init(k number, sign varchar2 := '+') is begin l_list(1).dom := '10'; l_list(1).usage := 0; l_list(1).sign := '+'; l_list(2).dom := '16'; l_list(2).usage := 0; l_list(2).sign := '+'; l_list(3).dom := '46'; l_list(3).usage := 0; l_list(3).sign := '+'; l_list(4).dom := '45'; l_list(4).usage := 0; l_list(4).sign := '+'; l_list(k).usage := 1; l_list(k).sign := sign; ----------------------- l_res.extend; l_res(1).pos := k; l_res(1).sign := sign; end; function p(ind number, i number, sign out varchar2) return boolean is l_res boolean := true; str varchar2(20); begin if l_list(ind).sign = '+' then str := substr(l_list(ind).dom, 2, 1); else str := substr(l_list(ind).dom, 1, 1); end if; -- ind : s chem sravnivat, i : chto sravnivat if str = substr(l_list(i).dom, 1, 1) then sign := '+'; l_res := true; elsif str = substr(l_list(i).dom, 2, 1) then sign := '-'; l_res := true; else l_res := false; end if; return l_res; end; procedure Backtracking(ind number) is l_sign varchar2(20); begin for i in 1..l_list.last loop if i != ind and l_list(i).usage != 1 and p(ind, i, l_sign) then -- update source array (mark path) l_list(i).usage := 1; l_list(i).sign := l_sign; -- add to res array l_res.extend; l_res(l_res.last).pos := i; l_res(l_res.last).sign := l_sign; if l_res.count = l_list.count then jb_test.d('--------------'); for j in 1..l_res.last loop jb_test.d(l_res(j).pos||' '||l_res(j).sign); end loop; l_succ := true; end if; Backtracking(i); end if; end loop; -- delete res array l_res.delete; end; begin -- Test statement here jb_test.d('Start...'); init(1); for k in 1..l_list.count loop l_res.delete; init(k); Backtracking(k); l_res.delete; init(k, '-'); Backtracking(k); end loop; if not l_succ then jb_test.d('No future !'); else jb_test.d('Done.'); end if; exception when others then jb_test.d('Others !!!'); jb_test.d(sqlcode); jb_test.d(sqlerrm); end; |