<?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=3404_-_castel3</id>
	<title>3404 - castel3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3404_-_castel3"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3404_-_castel3&amp;action=history"/>
	<updated>2026-05-01T06:37:18Z</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=3404_-_castel3&amp;diff=9704&amp;oldid=prev</id>
		<title>Aurelia Raluca at 20:53, 22 March 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3404_-_castel3&amp;diff=9704&amp;oldid=prev"/>
		<updated>2024-03-22T20:53:49Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=3404_-_castel3&amp;amp;diff=9704&amp;amp;oldid=9303&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3404_-_castel3&amp;diff=9303&amp;oldid=prev</id>
		<title>Aurelia Raluca: Pagină nouă: == Enunt ==  Înspăimântătorii tăi luptători au răpit-o pe Prinţesa Ghiocela şi au închis-o în castelul tău de pe vârful Muntelui Pleşuv. Deoarece eşti un geniu malefic, te-ai hotărât să îi oferi prinţesei iluzia unei şanse de evadare. Castelul tău are forma unui caroiaj cu M linii şi N coloane. Cele M x N celule ale castelului sunt numerotate de la 1 la M x N în ordinea parcurgerii caroiajului pe linii de sus în jos, iar pe aceeaşi linie în ordinea...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3404_-_castel3&amp;diff=9303&amp;oldid=prev"/>
		<updated>2024-01-09T08:46:30Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt ==  Înspăimântătorii tăi luptători au răpit-o pe Prinţesa Ghiocela şi au închis-o în castelul tău de pe vârful Muntelui Pleşuv. Deoarece eşti un geniu malefic, te-ai hotărât să îi oferi prinţesei iluzia unei şanse de evadare. Castelul tău are forma unui caroiaj cu M linii şi N coloane. Cele M x N celule ale castelului sunt numerotate de la 1 la M x N în ordinea parcurgerii caroiajului pe linii de sus în jos, iar pe aceeaşi linie în ordinea...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Înspăimântătorii tăi luptători au răpit-o pe Prinţesa Ghiocela şi au închis-o în castelul tău de pe vârful Muntelui Pleşuv. Deoarece eşti un geniu malefic, te-ai hotărât să îi oferi prinţesei iluzia unei şanse de evadare.&lt;br /&gt;
Castelul tău are forma unui caroiaj cu M linii şi N coloane. Cele M x N celule ale castelului sunt numerotate de la 1 la M x N în ordinea parcurgerii caroiajului pe linii de sus în jos, iar pe aceeaşi linie în ordinea coloanelor de la stânga la dreapta. În fiecare dintre celulele castelului ai pus câte o cheie, mai precis celula i conţine cheia cu numărul i. Evident, pentru a intra într-o cameră, prinţesa are nevoie de o anume cheie care permite deschiderea acesteia. Mai mult, dintr-o cameră prinţesa se poate deplasa într-un moment numai într-una dintre cele maximum patru camere adiacente pe orizontală şi verticală, doar dacă deţine cheia necesară deschiderii sale. Odată ce a intrat într-o cameră şi a obţinut o cheie, prinţesa o păstrează şi poate să o utilizeze ori de câte ori doreşte.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Deşi eşti convins că prinţesa nu va scăpa din castel, eşti curios să afli câte dintre cele M x N camere îi sunt accesibile. Date fiind dimensiunile castelului, camera în care se află iniţial prinţesa şi cheile necesare deschiderii fiecăreia dintre camere, află răspunsul la această întrebare presantă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare castel.in conţine pe prima linie trei numere naturale M N K separate prin câte un spaţiu reprezentând dimensiunile castelului, respectiv numărul camerei în care se află iniţial prinţesa. Urmează descrierea castelului. Pe fiecare dintre următoarele M linii se află câte N numere naturale cuprinse între 1 şi M x N reprezentând cheile necesare deschiderii fiecăreia dintre camere.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire castel.out va conţine o singură linie pe care va fi scris un singur număr natural reprezentând numărul de camere accesibile prinţesei.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
*1 ≤ M, N ≤ 150&lt;br /&gt;
*1 ≤ K ≤ M * N&lt;br /&gt;
*Odată ce prinţesa a păşit într-o cameră, respectiva cameră va rămâne pentru totdeauna deschisă.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
;castelin.txt&lt;br /&gt;
&lt;br /&gt;
:4 3 1&lt;br /&gt;
&lt;br /&gt;
:1 1 4&lt;br /&gt;
&lt;br /&gt;
:1 6 2&lt;br /&gt;
&lt;br /&gt;
:6 9 8&lt;br /&gt;
&lt;br /&gt;
:12 10 11&lt;br /&gt;
&lt;br /&gt;
;castelout.txt&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
:7&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
;castelin.txt&lt;br /&gt;
&lt;br /&gt;
:0 8 9&lt;br /&gt;
&lt;br /&gt;
:-2 -3 -4&lt;br /&gt;
&lt;br /&gt;
:123  433 4322&lt;br /&gt;
&lt;br /&gt;
:9383 -12 -2&lt;br /&gt;
&lt;br /&gt;
:-098 -9087 0&lt;br /&gt;
&lt;br /&gt;
;castelout.txt&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;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def numar_camere_accesibile(M, N, camera_initiala, chei_necesare):&lt;br /&gt;
    # Pasul 1: Construirea grafului&lt;br /&gt;
    graf = construieste_graf(M, N, chei_necesare)&lt;br /&gt;
&lt;br /&gt;
    # Pasul 2: Căutarea în graf&lt;br /&gt;
    chei_prințesa = set()&lt;br /&gt;
    camere_accesibile = set()&lt;br /&gt;
&lt;br /&gt;
    def dfs(camera):&lt;br /&gt;
        nonlocal chei_prințesa, camere_accesibile&lt;br /&gt;
        camere_accesibile.add(camera)&lt;br /&gt;
&lt;br /&gt;
        for vecin in graf[camera]:&lt;br /&gt;
            cheie_necesara = graf[camera][vecin]&lt;br /&gt;
            if cheie_necesara in chei_prințesa:&lt;br /&gt;
                if vecin not in camere_accesibile:&lt;br /&gt;
                    dfs(vecin)&lt;br /&gt;
&lt;br /&gt;
    dfs(camera_initiala)&lt;br /&gt;
&lt;br /&gt;
    # Pasul 3: Numărăm camerele accesibile&lt;br /&gt;
    return len(camere_accesibile)&lt;br /&gt;
&lt;br /&gt;
def construieste_graf(M, N, chei_necesare):&lt;br /&gt;
    graf = {}&lt;br /&gt;
    for i in range(1, M * N + 1):&lt;br /&gt;
        graf[i] = {}&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, M + 1):&lt;br /&gt;
        for j in range(1, N + 1):&lt;br /&gt;
            camera = (i - 1) * N + j&lt;br /&gt;
&lt;br /&gt;
            # Verificăm camerele adiacente pe orizontală și verticală&lt;br /&gt;
            if i &amp;gt; 1:&lt;br /&gt;
                vecin = camera - N&lt;br /&gt;
                cheie = chei_necesare[vecin - 1]&lt;br /&gt;
                graf[camera][vecin] = cheie&lt;br /&gt;
                graf[vecin][camera] = cheie&lt;br /&gt;
&lt;br /&gt;
            if i &amp;lt; M:&lt;br /&gt;
                vecin = camera + N&lt;br /&gt;
                cheie = chei_necesare[camera - 1]&lt;br /&gt;
                graf[camera][vecin] = cheie&lt;br /&gt;
                graf[vecin][camera] = cheie&lt;br /&gt;
&lt;br /&gt;
            if j &amp;gt; 1:&lt;br /&gt;
                vecin = camera - 1&lt;br /&gt;
                cheie = chei_necesare[vecin - 1]&lt;br /&gt;
                graf[camera][vecin] = cheie&lt;br /&gt;
                graf[vecin][camera] = cheie&lt;br /&gt;
&lt;br /&gt;
            if j &amp;lt; N:&lt;br /&gt;
                vecin = camera + 1&lt;br /&gt;
                cheie = chei_necesare[camera - 1]&lt;br /&gt;
                graf[camera][vecin] = cheie&lt;br /&gt;
                graf[vecin][camera] = cheie&lt;br /&gt;
&lt;br /&gt;
    return graf&lt;br /&gt;
&lt;br /&gt;
rezultat = numar_camere_accesibile(M, N, camera_initiala, chei_necesare)&lt;br /&gt;
print(rezultat)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
</feed>