<?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=0422_-_Graf_Partial_2</id>
	<title>0422 - Graf Partial 2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0422_-_Graf_Partial_2"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0422_-_Graf_Partial_2&amp;action=history"/>
	<updated>2026-06-17T07:12: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=0422_-_Graf_Partial_2&amp;diff=8694&amp;oldid=prev</id>
		<title>AntalKrisztian: Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri, etichetate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Din acest graf se elimină toate muchiile cu o extremitate într-un vârf de grad maxim. Să se determine numărul de muchii eliminate și să se afișeze matricea de adiacență a grafului parțial obținut. == Date de intrare == Fişierul de intrare &#039;&#039;&#039;graf_partial_2in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând numărul de vârfuri ale gra...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0422_-_Graf_Partial_2&amp;diff=8694&amp;oldid=prev"/>
		<updated>2023-12-29T18:31:43Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; vârfuri, etichetate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Din acest graf se elimină toate muchiile cu o extremitate într-un vârf de grad maxim. Să se determine numărul de muchii eliminate și să se afișeze matricea de adiacență a grafului parțial obținut. == Date de intrare == Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;graf_partial_2in.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale gra...&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;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; vârfuri, etichetate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Din acest graf se elimină toate muchiile cu o extremitate într-un vârf de grad maxim. Să se determine numărul de muchii eliminate și să se afișeze matricea de adiacență a grafului parțial obținut.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &amp;#039;&amp;#039;&amp;#039;graf_partial_2in.txt&amp;#039;&amp;#039;&amp;#039; conţine pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere &amp;#039;&amp;#039;&amp;#039;i j&amp;#039;&amp;#039;&amp;#039;, cu semnificația că există muchie între &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &amp;#039;&amp;#039;&amp;#039;graf_partial_2out.txt&amp;#039;&amp;#039;&amp;#039; va conţine pe prime linie numărul de muchii eliminate, iar pe următoarele linii matricea de adiacență a grafului parțial obținut, câte o linie a matricei pe o linie a fișierului, elementele de pe fiecare linie fiind separate prin exact un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; n &amp;amp;les; 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; i , j &amp;amp;les; n&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* muchiile se pot repeta în fișierul de intrare&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; graf_partial_2in.txt&lt;br /&gt;
 6&lt;br /&gt;
 1 2&lt;br /&gt;
 6 2&lt;br /&gt;
 2 3&lt;br /&gt;
 4 3&lt;br /&gt;
 5 3&lt;br /&gt;
 4 5&lt;br /&gt;
 3 6&lt;br /&gt;
 6 4&lt;br /&gt;
; graf_partial_2out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 4&lt;br /&gt;
 0 1 0 0 0 0 &lt;br /&gt;
 1 0 0 0 0 1 &lt;br /&gt;
 0 0 0 0 0 0 &lt;br /&gt;
 0 0 0 0 1 1 &lt;br /&gt;
 0 0 0 1 0 0 &lt;br /&gt;
 0 1 0 1 0 0 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se elimină muchiile &amp;#039;&amp;#039;&amp;#039;(2 3), (4 3), (5 3), (3 6)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; graf_partial_2in.txt&lt;br /&gt;
 jgirjiurmgrog&lt;br /&gt;
; graf_partial_2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, muchii_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 1-100&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 1-100&lt;br /&gt;
    for muchie_validare in muchii_validare:    # Parcurgem lista de muchii&lt;br /&gt;
        # Verificăm dacă valoarea absolută a fiecărui vârf este în intervalul 1-n&lt;br /&gt;
        if (abs(muchie_validare[0]) &amp;lt; 1 or abs(muchie_validare[0]) &amp;gt; n_validare &lt;br /&gt;
                or abs(muchie_validare[1]) &amp;lt; 1 or abs(muchie_validare[1]) &amp;gt; n_validare):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția elimina_muchii elimină muchiile cu o extremitate într-un vârf de grad maxim&lt;br /&gt;
def elimina_muchii(n_elimina, muchii_elimina):&lt;br /&gt;
    # Calculăm gradele vârfurilor&lt;br /&gt;
    grade = [0] * (n_elimina + 1)&lt;br /&gt;
    for muchie_eliminare in muchii_elimina:&lt;br /&gt;
        grade[muchie_eliminare[0]] += 1&lt;br /&gt;
        grade[muchie_eliminare[1]] += 1&lt;br /&gt;
    # Determinăm gradul maxim&lt;br /&gt;
    grad_max = max(grade)&lt;br /&gt;
    # Eliminăm muchiile cu o extremitate într-un vârf de grad maxim&lt;br /&gt;
    muchii_eliminate_ = 0&lt;br /&gt;
    muchii_noi_creat = []&lt;br /&gt;
    for muchie_eliminare in muchii_elimina:&lt;br /&gt;
        if grade[muchie_eliminare[0]] == grad_max or grade[muchie_eliminare[1]] == grad_max:&lt;br /&gt;
            muchii_eliminate_ += 1&lt;br /&gt;
        else:&lt;br /&gt;
            muchii_noi_creat.append(muchie_eliminare)&lt;br /&gt;
    return muchii_eliminate_, muchii_noi_creat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    file_in = open(&amp;quot;graf_partial_2in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;graf_partial_2out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de vârfuri&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim muchiile&lt;br /&gt;
        muchii_main = [list(map(int, linie.split())) for linie in file_in.readlines()]&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, muchii_main)&lt;br /&gt;
        # Eliminăm muchiile cu o extremitate într-un vârf de grad maxim&lt;br /&gt;
        muchii_eliminate, muchii_noi = elimina_muchii(n_main, muchii_main)&lt;br /&gt;
        # Scriem numărul de muchii eliminate în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(muchii_eliminate) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
        # Scriem matricea de adiacență a grafului parțial obținut în fișierul de ieșire&lt;br /&gt;
        matrice_adiacenta = [[0] * n_main for _ in range(n_main)]&lt;br /&gt;
        for muchie in muchii_noi:&lt;br /&gt;
            matrice_adiacenta[muchie[0]-1][muchie[1]-1] = 1&lt;br /&gt;
            matrice_adiacenta[muchie[1]-1][muchie[0]-1] = 1&lt;br /&gt;
        for linie in matrice_adiacenta:&lt;br /&gt;
            file_out.write(&amp;#039; &amp;#039;.join(map(str, linie)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
</feed>