<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4152_-_Lant_Maxim_1</id>
	<title>4152 - Lant Maxim 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4152_-_Lant_Maxim_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4152_-_Lant_Maxim_1&amp;action=history"/>
	<updated>2026-05-01T06:37:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4152_-_Lant_Maxim_1&amp;diff=8714&amp;oldid=prev</id>
		<title>Rus Marius: Pagină nouă: = Cerinţa = Se dă lista muchiilor unui graf neorientat cu &lt;code&gt;n&lt;/code&gt; vârfuri și un vârf &lt;code&gt;q&lt;/code&gt;. Să se determine cel mai lung lanț elementar cu extremitatea finală în &lt;code&gt;q&lt;/code&gt;.  = Date de intrare = Fişierul de intrare &lt;code&gt;lantmaxim1IN.txt&lt;/code&gt; conţine pe prima linie numerele &lt;code&gt;n&lt;/code&gt; și &lt;code&gt;m&lt;/code&gt;, reprezentând numărul de vârfuri ale grafului și numărul de muchii date în continuare. Fiecare dintre următoarele &lt;code&gt;m&lt;/code&gt; li...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4152_-_Lant_Maxim_1&amp;diff=8714&amp;oldid=prev"/>
		<updated>2023-12-30T12:50:44Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: = Cerinţa = Se dă lista muchiilor unui graf neorientat cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; vârfuri și un vârf &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;. Să se determine cel mai lung lanț elementar cu extremitatea finală în &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;.  = Date de intrare = Fişierul de intrare &amp;lt;code&amp;gt;lantmaxim1IN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, reprezentând numărul de vârfuri ale grafului și numărul de muchii date în continuare. Fiecare dintre următoarele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; li...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Cerinţa =&lt;br /&gt;
Se dă lista muchiilor unui graf neorientat cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; vârfuri și un vârf &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;. Să se determine cel mai lung lanț elementar cu extremitatea finală în &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;lantmaxim1IN.txt&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, reprezentând numărul de vârfuri ale grafului și numărul de muchii date în continuare. Fiecare dintre următoarele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii conține câte o pereche de numere &amp;lt;code&amp;gt;i j&amp;lt;/code&amp;gt;, cu semnificația că există muchie între &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Următoarea linie conține numărul &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;lantmaxim1OUT.txt&amp;lt;/code&amp;gt; va conține cel mai lung lanț elementar cu extremitățile &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;q&amp;lt;/code&amp;gt;, vârfurile sale fiind separate prin exact un spațiu. Dacă sunt mai multe lanțuri de lungime maximă, se va afișa primul în ordine lexicografică.În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Nu corespunde restricțiilor impuse&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Restricţii şi precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 20&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ i , j ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ q ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;lantmaxim1IN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 6&lt;br /&gt;
 1 4 &lt;br /&gt;
 1 3 &lt;br /&gt;
 3 5 &lt;br /&gt;
 4 5 &lt;br /&gt;
 1 2 &lt;br /&gt;
 3 4&lt;br /&gt;
 5&lt;br /&gt;
&amp;lt;code&amp;gt;lantmaxim1OUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 2 1 3 4 5 &lt;br /&gt;
&lt;br /&gt;
= Exemplul 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;lantmaxim1IN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 21 21&lt;br /&gt;
 1 4 &lt;br /&gt;
 1 3 &lt;br /&gt;
 3 5 &lt;br /&gt;
 4 5 &lt;br /&gt;
 1 2 &lt;br /&gt;
 3 4&lt;br /&gt;
 5&lt;br /&gt;
&amp;lt;code&amp;gt;lantmaxim1OUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Nu corespunde restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n, muchii, q):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 20):&lt;br /&gt;
        return False&lt;br /&gt;
    for u, v in muchii:&lt;br /&gt;
        if not (1 &amp;lt;= u &amp;lt;= n) or not (1 &amp;lt;= v &amp;lt;= n):&lt;br /&gt;
            return False&lt;br /&gt;
    if not (1 &amp;lt;= q &amp;lt;= n):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gestionare_restrictii(file_path_out):&lt;br /&gt;
    with open(file_path_out, &amp;#039;w&amp;#039;) as file_out:&lt;br /&gt;
        file_out.write(&amp;quot;Nu corespunde restrictiilor impuse&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
def citeste_graf(file_path):&lt;br /&gt;
    with open(file_path, &amp;#039;r&amp;#039;) as file:&lt;br /&gt;
        n, m = map(int, file.readline().split())&lt;br /&gt;
        muchii = [tuple(map(int, file.readline().split())) for _ in range(m)]&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            q = int(file.readline())&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            gestionare_restrictii(&amp;quot;lantmaxim1OUT.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not verifica_restrictii(n, muchii, q):&lt;br /&gt;
        gestionare_restrictii(&amp;quot;lantmaxim1OUT.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return n, muchii, q&lt;br /&gt;
&lt;br /&gt;
def dfs_lant_maxim(q, graf, vizitat, path, lant_maxim):&lt;br /&gt;
    vizitat[q] = True&lt;br /&gt;
    path.append(q)&lt;br /&gt;
&lt;br /&gt;
    for vecin in graf[q]:&lt;br /&gt;
        if not vizitat[vecin]:&lt;br /&gt;
            dfs_lant_maxim(vecin, graf, vizitat, path, lant_maxim)&lt;br /&gt;
&lt;br /&gt;
    if len(path) &amp;gt;= len(lant_maxim):&lt;br /&gt;
        lant_maxim.clear()&lt;br /&gt;
        lant_maxim.extend(path)&lt;br /&gt;
&lt;br /&gt;
    path.pop()&lt;br /&gt;
    vizitat[q] = False&lt;br /&gt;
&lt;br /&gt;
def lungime_lant(q, graf, vizitat):&lt;br /&gt;
    lant_maxim = []&lt;br /&gt;
    dfs_lant_maxim(q, graf, vizitat, [], lant_maxim)&lt;br /&gt;
    return len(lant_maxim), lant_maxim&lt;br /&gt;
&lt;br /&gt;
def gaseste_lant_maxim(n, muchii, q):&lt;br /&gt;
    graf = {i: [] for i in range(1, n + 1)}&lt;br /&gt;
    for u, v in muchii:&lt;br /&gt;
        graf[u].append(v)&lt;br /&gt;
        graf[v].append(u)&lt;br /&gt;
&lt;br /&gt;
    vizitat = {i: False for i in range(1, n + 1)}&lt;br /&gt;
&lt;br /&gt;
    lungime_maxima = 0&lt;br /&gt;
    lant_maxim = []&lt;br /&gt;
&lt;br /&gt;
    for v in range(1, n + 1):&lt;br /&gt;
        if not vizitat[v]:&lt;br /&gt;
            lungime, lant = lungime_lant(v, graf, vizitat)&lt;br /&gt;
            if lungime &amp;gt; lungime_maxima:&lt;br /&gt;
                lungime_maxima = lungime&lt;br /&gt;
                lant_maxim = lant&lt;br /&gt;
&lt;br /&gt;
    return lant_maxim&lt;br /&gt;
&lt;br /&gt;
def scrie_lant_maxim(file_path, lant_maxim):&lt;br /&gt;
    with open(file_path, &amp;#039;w&amp;#039;) as file:&lt;br /&gt;
        file.write(&amp;#039; &amp;#039;.join(map(str, lant_maxim)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_in = &amp;quot;lantmaxim1IN.txt&amp;quot;&lt;br /&gt;
    file_out = &amp;quot;lantmaxim1OUT.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    n, muchii, q = citeste_graf(file_in)&lt;br /&gt;
    lant_maxim = gaseste_lant_maxim(n, muchii, q)&lt;br /&gt;
&lt;br /&gt;
    if lant_maxim:&lt;br /&gt;
        scrie_lant_maxim(file_out, lant_maxim)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(file_out, &amp;#039;w&amp;#039;) as file_out:&lt;br /&gt;
            file_out.write(&amp;quot;Nu corespunde restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rus Marius</name></author>
	</entry>
</feed>