<?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=3277_-_Lee</id>
	<title>3277 - Lee - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3277_-_Lee"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3277_-_Lee&amp;action=history"/>
	<updated>2026-05-01T02:59:59Z</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=3277_-_Lee&amp;diff=7743&amp;oldid=prev</id>
		<title>Bonte Lucas Gabriel: Pagină nouă: Se consideră o matrice cu &#039;&#039;&#039;N&#039;&#039;&#039; linii și &#039;&#039;&#039;N&#039;&#039;&#039; coloane, numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;N&#039;&#039;&#039;, care memorează doar valori &#039;&#039;&#039;0&#039;&#039;&#039; și &#039;&#039;&#039;1&#039;&#039;&#039;. Se dau de asemenea coordonatele a trei componente din această matrice.  ==Cerința==  Să se determine lungimea minimă a unui drum care pleacă din poziția &#039;&#039;&#039;(1,1)&#039;&#039;&#039;, trece obligatoriu prin cele trei componente date (nu contează în ce ordine) și apoi ajunge în poziția &#039;&#039;&#039;(N, N)&#039;&#039;&#039;, drum care trece doar prin componente ma...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3277_-_Lee&amp;diff=7743&amp;oldid=prev"/>
		<updated>2023-12-10T16:38:15Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Se consideră o matrice cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coloane, numerotate 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;, care memorează doar valori &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;. Se dau de asemenea coordonatele a trei componente din această matrice.  ==Cerința==  Să se determine lungimea minimă a unui drum care pleacă din poziția &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039;, trece obligatoriu prin cele trei componente date (nu contează în ce ordine) și apoi ajunge în poziția &amp;#039;&amp;#039;&amp;#039;(N, N)&amp;#039;&amp;#039;&amp;#039;, drum care trece doar prin componente ma...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Se consideră o matrice cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coloane, numerotate 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;, care memorează doar valori &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;. Se dau de asemenea coordonatele a trei componente din această matrice.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Să se determine lungimea minimă a unui drum care pleacă din poziția &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039;, trece obligatoriu prin cele trei componente date (nu contează în ce ordine) și apoi ajunge în poziția &amp;#039;&amp;#039;&amp;#039;(N, N)&amp;#039;&amp;#039;&amp;#039;, drum care trece doar prin componente marcate cu &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; și învecinate pe linii și coloane. Un pas din drum constă din deplasarea dintr-un punct &amp;#039;&amp;#039;&amp;#039;(i,j)&amp;#039;&amp;#039;&amp;#039; într-unul din cele patru învecinate pe linie și coloană, adică într-unul din punctele &amp;#039;&amp;#039;&amp;#039;(i-1,j), (i,j-1), (i+1, j), (i,j+1)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;. Pe fiecare din următoarele &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coloane este descrisă matricea binară. Pe ultimele trei linii sunt câte două numere naturale de forma &amp;#039;&amp;#039;&amp;#039;x y&amp;#039;&amp;#039;&amp;#039; ce descriu coordonatele în matrice (linie și coloană) ale celor trei puncte.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran un singur număr natural, care reprezintă lungimea minimă a drumului care pornește din &amp;#039;&amp;#039;&amp;#039;(1, 1)&amp;#039;&amp;#039;&amp;#039;, trece prin cele trei puncte date și ajunge în punctul &amp;#039;&amp;#039;&amp;#039;(N, N)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;3 ≤ N ≤ 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Cele trei puncte sunt distincte, diferite de pozițiile &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;(N,N)&amp;#039;&amp;#039;&amp;#039; și se găsesc la poziții din matrice marcate cu &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. De asemenea, la pozițiile &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;(N,N)&amp;#039;&amp;#039;&amp;#039; se găsește mereu valoarea &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Pentru datele de intrare va exista mereu soluție, adică există cel puțin un drum de la &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;(N,N)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Intrare&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 4&lt;br /&gt;
 0 0 0 0&lt;br /&gt;
 1 0 1 1&lt;br /&gt;
 0 0 0 1&lt;br /&gt;
 1 0 0 0&lt;br /&gt;
 3 3&lt;br /&gt;
 1 4&lt;br /&gt;
 3 1&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ieșire&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 12&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Intrare&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 lee&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ieșire&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from heapq import heappop, heappush&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(n):  # functia de verificare a datelor de intrare&lt;br /&gt;
    if 3 &amp;lt;= n &amp;lt;= 100:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def distanta_minima(matrice, start, end):&lt;br /&gt;
    n = len(matrice)&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    distante = [[float(&amp;#039;inf&amp;#039;)] * n for _ in range(n)]&lt;br /&gt;
    distante[start[0]][start[1]] = 0&lt;br /&gt;
    heap = [(0, start)]&lt;br /&gt;
    while heap:&lt;br /&gt;
        d, (x, y) = heappop(heap)&lt;br /&gt;
        if (x, y) == end:&lt;br /&gt;
            return d&lt;br /&gt;
        for i in range(4):&lt;br /&gt;
            nx, ny = x + dx[i], y + dy[i]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; n and 0 &amp;lt;= ny &amp;lt; n and matrice[nx][ny] == 0:&lt;br /&gt;
                if d + 1 &amp;lt; distante[nx][ny]:&lt;br /&gt;
                    distante[nx][ny] = d + 1&lt;br /&gt;
                    heappush(heap, (d + 1, (nx, ny)))&lt;br /&gt;
    return float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti dimensiunea matricei (un numar natural): &amp;quot;))&lt;br /&gt;
    if not verificare_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Introduceti matricea linie cu linie (0 sau 1 separate prin spatii): &amp;quot;)&lt;br /&gt;
    matrice = [list(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
    puncte = [(0, 0)]&lt;br /&gt;
    print(&amp;quot;Introduceti coordonatele celor trei puncte (doua numere naturale separate prin spatii): &amp;quot;)&lt;br /&gt;
    for _ in range(3):&lt;br /&gt;
        x, y = map(int, input().split())&lt;br /&gt;
        puncte.append((x - 1, y - 1))&lt;br /&gt;
    puncte.append((n - 1, n - 1))&lt;br /&gt;
    distante = [[distanta_minima(matrice, puncte[i], puncte[j]) for j in range(5)] for i in range(5)]&lt;br /&gt;
    min_distanta = float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    for perm in permutations([1, 2, 3]):&lt;br /&gt;
        distanta = distante[0][perm[0]] + distante[perm[0]][perm[1]] + distante[perm[1]][perm[2]] + distante[perm[2]][4]&lt;br /&gt;
        min_distanta = min(min_distanta, distanta)&lt;br /&gt;
    print(&amp;quot;Lungimea minima a drumului este: &amp;quot;, min_distanta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        rezolvare()&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Cele trei puncte sunt situate în coordonatele &amp;#039;&amp;#039;&amp;#039;(3,3), (1,4), (3,1)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Drumul de lungime minimă este:&lt;br /&gt;
&lt;br /&gt;
de la &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;(1,4)&amp;#039;&amp;#039;&amp;#039; (lungime &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
de la &amp;#039;&amp;#039;&amp;#039;(1,4)&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;(3,1)&amp;#039;&amp;#039;&amp;#039; (lungime &amp;#039;&amp;#039;&amp;#039;5&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
de la &amp;#039;&amp;#039;&amp;#039;(3,1)&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;(3,3)&amp;#039;&amp;#039;&amp;#039; (lungime &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
de la &amp;#039;&amp;#039;&amp;#039;(3,3)&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;(4,4)&amp;#039;&amp;#039;&amp;#039; (lungime &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;)&lt;br /&gt;
Lungime totală: &amp;#039;&amp;#039;&amp;#039;3 + 5 + 2 + 2 = 12&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
</feed>