<?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=0384_-_Saritura_Calului_1</id>
	<title>0384 - Saritura Calului 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=0384_-_Saritura_Calului_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0384_-_Saritura_Calului_1&amp;action=history"/>
	<updated>2026-06-17T06:17: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=0384_-_Saritura_Calului_1&amp;diff=9717&amp;oldid=prev</id>
		<title>Aurelia Raluca: Pagină nouă: = Cerinţa = Se consideră o tablă de şah cu &lt;code&gt;n&lt;/code&gt; linii şi &lt;code&gt;m&lt;/code&gt; coloane. La o poziţie dată se află un cal de şah, acesta putându-se deplasa pe tablă în modul specific acestei piese de şah (în L).  Să se determine o modalitate de parcurgere a tablei de către calul dat, astfel încât acesta să nu treacă de două ori prin aceeaşi poziţie. Parcurgerea constă într-o matrice cu &lt;code&gt;n&lt;/code&gt; linii și &lt;code&gt;m&lt;/code&gt; coloane, fiecare element...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0384_-_Saritura_Calului_1&amp;diff=9717&amp;oldid=prev"/>
		<updated>2024-03-23T00:13:39Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: = Cerinţa = Se consideră o tablă de şah cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane. La o poziţie dată se află un cal de şah, acesta putându-se deplasa pe tablă în modul specific acestei piese de şah (în L).  Să se determine o modalitate de parcurgere a tablei de către calul dat, astfel încât acesta să nu treacă de două ori prin aceeaşi poziţie. Parcurgerea constă într-o matrice cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane, fiecare element...&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 consideră o tablă de şah cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane. La o poziţie dată se află un cal de şah, acesta putându-se deplasa pe tablă în modul specific acestei piese de şah (în L).&lt;br /&gt;
&lt;br /&gt;
Să se determine o modalitate de parcurgere a tablei de către calul dat, astfel încât acesta să nu treacă de două ori prin aceeaşi poziţie. Parcurgerea constă într-o matrice cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane, fiecare element al matricei având valoarea pasului la care se ajunge în acel element, sau &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, dacă nu s-a ajuns.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;saritura_calului1IN.txt&amp;lt;/code&amp;gt; conține numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; , apoi numere &amp;lt;code&amp;gt;x y&amp;lt;/code&amp;gt;, reprezentând dimensiunile tablei (numărul de linii şi numărul de coloane) , respectiv coordonatele iniţiale ale calului (linie, coloana).&lt;br /&gt;
&lt;br /&gt;
= Date de ieşire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;saritura_calului1OUT.txt&amp;lt;/code&amp;gt; va conține &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii cu câte &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; numere naturale cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;n*m&amp;lt;/code&amp;gt;, separate prin exact un spațiu, reprezentând parcurgerea solicitată. În cazul în care restricțiile nu sunt îndeplinite, se va afișa mesajul &amp;quot;Datele nu corespund restrictiilor 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,m ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ istart ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ jstart ≤ m&amp;lt;/code&amp;gt;&lt;br /&gt;
* scorul obținut pe fiecare test este proporțional cu gradul de acoperire a tablei. Astfel, dacă tabla este acoperită în întregime, se acordă 100% din punctaj. Dacă tabla este acoperită în proporție de 70%, se acordă 70% din punctaj, etc.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;saritura_calului1IN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 5 1 1&lt;br /&gt;
&amp;lt;code&amp;gt;saritura_calului1OUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 12 7 16 3 &lt;br /&gt;
 6 17 2 11 8 &lt;br /&gt;
 13 10 19 4 15 &lt;br /&gt;
 18 5 14 9 20&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;saritura_calului1IN.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 101 5 1 1&lt;br /&gt;
&amp;lt;code&amp;gt;saritura_calului1OUT.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Datele nu corespund 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 mutare_valida(tabla, vizitat, i, j, n, m):&lt;br /&gt;
    return 0 &amp;lt;= i &amp;lt; n and 0 &amp;lt;= j &amp;lt; m and not vizitat[i][j]&lt;br /&gt;
&lt;br /&gt;
def cal_tura(tabla, vizitat, i, j, n, m, contor_mutari):&lt;br /&gt;
    di = [-1, -2, -2, -1, 1, 2, 2, 1]&lt;br /&gt;
    dj = [-2, -1, 1, 2, 2, 1, -1, -2]&lt;br /&gt;
&lt;br /&gt;
    tabla[i][j] = contor_mutari&lt;br /&gt;
    vizitat[i][j] = True&lt;br /&gt;
    if contor_mutari == n * m:&lt;br /&gt;
        return True&lt;br /&gt;
    &lt;br /&gt;
    for k in range(8):&lt;br /&gt;
        ni = i + di[k]&lt;br /&gt;
        nj = j + dj[k]&lt;br /&gt;
        if mutare_valida(tabla, vizitat, ni, nj, n, m):&lt;br /&gt;
            if cal_tura(tabla, vizitat, ni, nj, n, m, contor_mutari + 1):&lt;br /&gt;
                return True&lt;br /&gt;
    &lt;br /&gt;
    tabla[i][j] = 0&lt;br /&gt;
    vizitat[i][j] = False&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(n, m, istart, jstart):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100 and 1 &amp;lt;= m &amp;lt;= 100 and 1 &amp;lt;= istart &amp;lt;= n and 1 &amp;lt;= jstart &amp;lt;= m):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def afisare_tabla(tabla, fout):&lt;br /&gt;
    for row in tabla:&lt;br /&gt;
        fout.write(&amp;#039; &amp;#039;.join(map(str, row)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fin = open(&amp;quot;saritura_calului1IN.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fout = open(&amp;quot;saritura_calului1OUT.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    n, m, istart, jstart = map(int, fin.readline().split())&lt;br /&gt;
    &lt;br /&gt;
    if not verificare_restrictii(n, m, istart, jstart):&lt;br /&gt;
        fout.write(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        tabla = [[0] * m for _ in range(n)]&lt;br /&gt;
        vizitat = [[False] * m for _ in range(n)]&lt;br /&gt;
        &lt;br /&gt;
        if cal_tura(tabla, vizitat, istart - 1, jstart - 1, n, m, 1):&lt;br /&gt;
            afisare_tabla(tabla, fout)&lt;br /&gt;
        else:&lt;br /&gt;
            fout.write(&amp;quot;Nu există soluție!&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    fin.close()&lt;br /&gt;
    fout.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aurelia Raluca</name></author>
	</entry>
</feed>