1 ответ
Славик Тупичев
Для более комфортного хранения инфы заведем матрицуC[1...n,1..n] (так нарекаемую матрицу смежности) в которой C[i,j]=1, если в комплекте есть пара (Ai,Aj) и C[i,j]=0 иначе.Будем строить все возможные цепочки (по правилу, данному в условии) и разыскивать посреди их ту, которая имеет максимальную длину.В качестве начального знака цепочки можно брать хоть какой знак из A. Пусть это знак Ai. Разыскиваем, просматривая строчку i матрицы C слева вправо элемент C[i,j]=1 (иными словами, разыскиваем пару с первым элементом Ai). Если такового элемента не существует, то берем в качестве начала строчки иной элемент огромного количества A. Если элемент C[i,j]=1 найден, то ему соответствует пара (Ai,Aj). Помечаем ее как теснее использованную полагая, например, C[i,j]=-1. Дальше просматриваем слева вправо строку j матрицы C в поисках еще не использованной пары (Aj,Ak) (C[j,k]=1). Присоединяем элемент Ak к имеющейся цепочке, полагаем C[j,k]=-1, разыскиваем единичный элемент в строке k и т.д. Представим, на неком шаге мы получили цепочкуAi Aj Ak ... As Al Apи в строке p матрицы больше нет ни 1-го единичного элемента. Это означает, что при таком подборе прошлых частей мы нашли наивысшую по длине строчку. Если ее длина больше длин всех отысканных ранее строк, запоминаем эту строчку как рекорд. После этого "отщепляем" от строчки заключительный элемент Ap и глядим, есть ли еще в строке l единичный элемент с индексом, великим p. Если да, то приписываем уже этот элемент к строке и пытаемся потом опять прирастить длину приобретенной строчки, если же нет, то "отщепляем" от строчки элемент A1, в строке S отыскиваем единичный элемент с индексом, великим l и т.д.Останов осуществляется тогда, когда мы обязаны "отщепить" от строчки Ai.Перебираем цепочки, начинающиеся со всех вероятных частей огромного количества A. Обретаем строку наибольшей длины:const M=10; очень число элементов в A
будем считать, что A состоит из чисел от 1 до N
var c:array[1..M,1..M] of integer;
curstr, maxstr: array[0..M] of integer;
в этих переменных хранятся текущая цепочка и
цепочка максимальной длины.
В нулевом элементе хранится длина цепочки
N,E : integer; N - число частей в A
i,j,k : integer; E - число пар в комплекте
procedure find;
var l,j : integer;
begin
l:=curstr[curstr[0]]; l = последний элемент цепочки
for j:=1 to N do просмотр строчки l
if C[l,j]=1
then begin
curstr[0]:=curstr[0]+1;
curstr[curstr[0]]:=j; j -gt; в цепочку
c[l,j]:=-1; пара использована
find;
c[l,j]:=1; пару снова разрешено использовать
curstr[0]:=curstr[0]-1;
end;
if curstr[0]gt;maxstr[0] если отыскали более
then maxstr:=curstr длинноватую строчку
end;
begin
readln(N); readln(E);
for i:=1 to N do
for j:=1 to N do
C[i,j]:=0;
for k:=1 to E do begin
write('еще одна пара: ',i,j);
c[i,j]:=1
end;
for i:=1 to N do begin
curr[0]:=1; поиск цепочки
curr[1]:=i; начинающейся элементом i
find;
end;
for i:=1 to maxstr[0] do
write(maxstr[i]); печать наибольшей строки end.
Задачка
Задан набор неповторяющихся пар (Ai,Aj), Ai, Aj принадлежат множеству А=A1, A2, ..., An. Необходимо составить цепочку максимальной длины по правилу(Ai,Aj)+(Aj,Ak)=(Ai,Aj,Ak).При образовании этой цепочки неважно какая пара может быть применена не более 1-го раза.
Решение
Задан набор неповторяющихся пар (Ai,Aj), Ai, Aj принадлежат множеству А=A1, A2, ..., An. Необходимо составить цепочку максимальной длины по правилу(Ai,Aj)+(Aj,Ak)=(Ai,Aj,Ak).При образовании этой цепочки неважно какая пара может быть применена не более 1-го раза.
Решение
Константин Калаченков
что это ? и вообщем это нето
Оленька Обаль
это ответ. а сама задача-вот Задан набор неповторяющихся пар (Ai,Aj), Ai, Aj принадлежат огромному количеству А=A1, A2, ..., An. Нужно составить цепочку наибольшей длины по правилу(Ai,Aj)+(Aj,Ak)=(Ai,Aj,Ak).При образовании этой цепочки неважно какая пара может быть применена не более одного раза.
Тамара
это нето что мне нужно
, оставишь ответ?
Похожие вопросы
-
Вопросы ответы
Новое
NEW
Статьи
Информатика
Статьи
Последние вопросы
Два тела массами m1 и m2 находящие на расстоянии R друг
Физика.
В сосуде 4целых одна пятая литр воды что бы заполнить сосуд
Математика.
Двум малярам Диме И Олегу поручили выкрасить фасад дома они разделили
Разные вопросы.
найти порядковый номер 41Э если в ядре 20 нейтронов
Разные вопросы.
в ряду натуральных чисел 3, 8, 10, 24, … 18 одно
Математика.
Предприятие по производству с/хоз продукции на производство затратило 3527000 руб Валовый
Разные вопросы.
Математика, задано на каникулы. ВАРИАНТ 1004
НОМЕР 1,2,3,4,5,6,7,8.
Математика.
Имеются три конденсатора емкостью С1=1мкФ, С2=2мкФ и С3=3мкФ. Какую наименьшую емкость
Физика.
Из точки м выходят 3 луча MP MN и MK причём
Геометрия.
выпиши в свою тетрадь те правила этикета которые тебе не были
Разные вопросы.
Облако тегов