составти задачку с графами пожалуйста

Составти задачку с графами пожалуйста

Задать свой вопрос
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).При образовании этой цепочки неважно какая пара может быть применена не более одного раза.
Тамара
это нето что мне нужно
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт