0413 - Adiacenta 1: Difference between revisions

From Bitnami MediaWiki
Pagină nouă: == Cerinţa == Se dă lista muchiilor unui graf neorientat. Să se afișeze matricea de adiacență a grafului. == Date de intrare == Fiecare dintre liniile fișierului '''adiacenta1.in''' conține câte o pereche de numere '''i j''', cu semnificația că există muchie între '''i''' și '''j'''. == Date de ieșire == Fişierul de ieşire '''adiacenta1.out''' va conţine '''n''' linii; pe fiecare dintre ele vor fi câte '''n''' valori separate prin exact un spațiu, reprezen...
 
No edit summary
 
(One intermediate revision by the same user not shown)
Line 2: Line 2:
Se dă lista muchiilor unui graf neorientat. Să se afișeze matricea de adiacență a grafului.
Se dă lista muchiilor unui graf neorientat. Să se afișeze matricea de adiacență a grafului.
== Date de intrare ==
== Date de intrare ==
Fiecare dintre liniile fișierului '''adiacenta1.in''' conține câte o pereche de numere '''i j''', cu semnificația că există muchie între '''i''' și '''j'''.
Fiecare dintre liniile fișierului '''adiacenta1in.txt''' conține câte o pereche de numere '''i j''', cu semnificația că există muchie între '''i''' și '''j'''.
== Date de ieșire ==
== Date de ieșire ==
Fişierul de ieşire '''adiacenta1.out''' va conţine '''n''' linii; pe fiecare dintre ele vor fi câte '''n''' valori separate prin exact un spațiu, reprezentând matricea de adiacență a grafului dat.
Fişierul de ieşire '''adiacenta1out.txt''' va conţine '''n''' linii; pe fiecare dintre ele vor fi câte '''n''' valori separate prin exact un spațiu, reprezentând matricea de adiacență a grafului dat.
== Restricţii şi precizări ==
== Restricţii şi precizări ==
* graful dat va avea cel mult '''100''' de vârfuri
* graful dat va avea cel mult '''100''' de vârfuri
Line 10: Line 10:
* numărul de vârfuri ale grafului va fi egal cu cea mai mare valoare din lista muchiilor
* numărul de vârfuri ale grafului va fi egal cu cea mai mare valoare din lista muchiilor
== Exemplu ==
== Exemplu ==
; adiacenta1.in
; adiacenta1in.txt
: 1 4  
1 4  
: 1 3  
1 3  
: 3 5  
3 5  
: 4 5  
4 5  
: 2 4  
2 4  
: 1 2  
1 2  
: 4 2  
4 2  
: 3 4  
3 4  
; adiacenta1.out
; adiacenta1out.txt
: 0 1 1 1 0  
Datele de intrare corespund restrictiilor impuse
: 1 0 0 1 0  
0 1 1 1 0  
: 1 0 0 1 1  
1 0 0 1 0  
: 1 1 1 0 1  
1 0 0 1 1  
: 0 0 1 1 0  
1 1 1 0 1  
0 0 1 1 0
; adiacenta1in.txt
1 400
1 3
3 5
4 5
2 4
1 2
4 2
3 4
; adiacenta1out.txt
Datele de intrare nu corespund restrictiilor impuse
== Rezolvare ==
== Rezolvare ==
<syntaxhighlight lang="python" line>
<syntaxhighlight lang="python" line>
# Citirea datelor de intrare
def validare(muchii):
with open('adiacenta1.in', 'r') as f:
     n = max(max(muchie) for muchie in muchii)
     muchii = [list(map(int, linie.split())) for linie in f]
    if not 1 <= n <= 100:
        return False, "Datele de intrare nu corespund restrictiilor impuse"
    return True, "Datele de intrare corespund restrictiilor impuse"


# Determinăm numărul de vârfuri ale grafului
n = max(max(muchie) for muchie in muchii)


# Inițializăm matricea de adiacență cu 0
def main():
adiacenta = [[0 for _ in range(n)] for _ in range(n)]
    with open('adiacenta1in.txt', 'r') as fin:
        muchii = [list(map(int, linie.split())) for linie in fin]


# Parcurgem fiecare muchie
    valid, message = validare(muchii)
for muchie in muchii:
     with open('adiacenta1out.txt', 'w') as fout:
     i, j = muchie
        fout.write(message + '\n')
    # Adăugăm muchia în matricea de adiacență
        if not valid:
    adiacenta[i-1][j-1] = 1
            return
    adiacenta[j-1][i-1] = 1


# Afișăm matricea de adiacență
        n = max(max(muchie) for muchie in muchii)
with open('adiacenta1.out', 'w') as f:
         adiacenta = [[0 for _ in range(n)] for _ in range(n)]
    for linie in adiacenta:
        for muchie in muchii:
         f.write(' '.join(map(str, linie)) + '\n')
            i, j = muchie
            adiacenta[i - 1][j - 1] = 1
            adiacenta[j - 1][i - 1] = 1


        for linie in adiacenta:
            fout.write(' '.join(map(str, linie)) + '\n')
if __name__ == "__main__":
    main()
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 17:09, 12 December 2023

Cerinţa[edit | edit source]

Se dă lista muchiilor unui graf neorientat. Să se afișeze matricea de adiacență a grafului.

Date de intrare[edit | edit source]

Fiecare dintre liniile fișierului adiacenta1in.txt conține câte o pereche de numere i j, cu semnificația că există muchie între i și j.

Date de ieșire[edit | edit source]

Fişierul de ieşire adiacenta1out.txt va conţine n linii; pe fiecare dintre ele vor fi câte n valori separate prin exact un spațiu, reprezentând matricea de adiacență a grafului dat.

Restricţii şi precizări[edit | edit source]

  • graful dat va avea cel mult 100 de vârfuri
  • muchiile se pot repeta în fișierul de intrare
  • numărul de vârfuri ale grafului va fi egal cu cea mai mare valoare din lista muchiilor

Exemplu[edit | edit source]

adiacenta1in.txt
1 4 
1 3 
3 5 
4 5 
2 4 
1 2 
4 2 
3 4 
adiacenta1out.txt
Datele de intrare corespund restrictiilor impuse
0 1 1 1 0 
1 0 0 1 0 
1 0 0 1 1 
1 1 1 0 1 
0 0 1 1 0
adiacenta1in.txt
1 400
1 3 
3 5 
4 5 
2 4 
1 2 
4 2 
3 4 
adiacenta1out.txt
Datele de intrare nu corespund restrictiilor impuse

Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def validare(muchii):

   n = max(max(muchie) for muchie in muchii)
   if not 1 <= n <= 100:
       return False, "Datele de intrare nu corespund restrictiilor impuse"
   return True, "Datele de intrare corespund restrictiilor impuse"


def main():

   with open('adiacenta1in.txt', 'r') as fin:
       muchii = [list(map(int, linie.split())) for linie in fin]
   valid, message = validare(muchii)
   with open('adiacenta1out.txt', 'w') as fout:
       fout.write(message + '\n')
       if not valid:
           return
       n = max(max(muchie) for muchie in muchii)
       adiacenta = [[0 for _ in range(n)] for _ in range(n)]
       for muchie in muchii:
           i, j = muchie
           adiacenta[i - 1][j - 1] = 1
           adiacenta[j - 1][i - 1] = 1
       for linie in adiacenta:
           fout.write(' '.join(map(str, linie)) + '\n')

if __name__ == "__main__":

   main()

</syntaxhighlight>