7.4. Π Π΅ΠΊΡΡΡΠΈΡ ΠΈ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ
Π Π΅ΠΊΡΡΡΠΈΡ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ. Π‘Π°ΠΌΡΠΌ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΌ ΠΈ Π½Π΅ΠΈΠ½ΡΠ΅Π»Π»Π΅ΠΊΡΡΠ°Π»ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π²ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΠ°Ρ ΠΈ Ρ.ΠΏ., ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ² (ΡΠΌ. 2.3.). ΠΠΎΠ³Π΄Π° ΠΆΠ΅ ΡΠ΅ΡΡ ΠΈΠ΄Π΅Ρ ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΉ, ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ², ΡΠΎ Π΅ΡΡΡ ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠΈΠΊΠ΅, ΡΠΎ ΡΠ΅ΠΊΡΡΡΠΈΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ°Π³ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°) Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ n Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°Π΄Π°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ n+1, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ.
ΠΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². Π‘Π½Π°ΡΠ°Π»Π° ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠΌΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°) Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°. ΠΠ°ΡΠ°Π΄ΠΎΠΊΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π·Π°Π΄Π°ΡΠ° ΡΠΆΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½Π° (Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ β ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌΠΈ ΡΠ°Π³Π°ΠΌΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠΈ), ΡΠΎ Π΅ΡΡΡ ΠΈΠ· n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° R ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° ΡΡΠ΅Π±ΡΠ΅ΠΌΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ W ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ k. Π Π΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Β«Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡΒ» ΠΊ W Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΠ· R, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ n+1, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ Β«ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎΒ» Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π·Π°Π΄Π°ΡΠΈ n Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° R.
ΠΠΈΠ΄ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ | ΠΠ»Π³ΠΎΡΠΈΡΠΌ n-Π³ΠΎ ΡΠ°Π³Π° | ΠΠ΅ΡΠ²Π»Π΅Π½ΠΈΠ΅ | T |
---|---|---|---|
ΠΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ | Π¦ΠΈΠΊΠ» for(i=0;i<n;i++) | --- | n |
ΠΡΠ΅ ΠΏΠ°ΡΡ | Π¦ΠΈΠΊΠ» Π² ΡΠΈΠΊΠ»Π΅ for(i=0;i<n-1;i++) for(j=i-1;j<n;j++) | --- | \frac{n(n-1)}{2} |
ΠΡΠ΅ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° | ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ (n-ΡΠΉ) ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· R ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Β«Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Β» ΠΈ Β«Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Β» Π² W | 2 | 2^n |
ΠΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈΠ· n ΠΏΠΎ m | ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ (n-ΡΠΉ) ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ· R ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Β«Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Β» ΠΈ Β«Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Β» Π² W ΠΏΡΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΈ ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π² W | 2(1,0) | N! \\ m!(n-m!) |
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π½ΠΎΡΡΡ Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ | Π W ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· R, ΠΊΠΎΡΠΎΡΡΠΉ Π² Π½Π΅ΠΌ ΠΎΡΡΠ°Π»ΡΡ | n...1 | N! |
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ-Π½ΠΎΡΡΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡΠΌΠΈ | Π W ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· R | n | n^n |
ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π΄Π²Π΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°: Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠ΅, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΡΠΎ Π΄Π²Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²Π° Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ (n+1) ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ. ΠΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ β ΠΏΡΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ².
//----------------------------------------------------------74-01
// ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅Ρ
ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²
// R - ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ
// W - ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠ΅Π΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ)
// n - Π½ΠΎΠΌΠ΅Ρ ΡΠ°Π³Π° Π² Π³Π»ΡΠ±ΠΈΠ½Ρ - ΠΈΠ½Π΄Π΅ΠΊΡ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠ· R
// k - ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ±ΡΠ°Π½Π½ΡΡ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
// N - ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π·Π°Π΄Π°ΡΠΈ
// cnt - ΡΡΠ΅ΡΡΠΈΠΊ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²
void F1(int W[], int R[], int n, int k, int N, int &cnt) {
int i;
if (n == N) {
cnt++;
printf("\n"); // Π΄ΠΎΡΡΠΈΠ³Π½ΡΡΠ° ΡΡΠ΅Π±ΡΠ΅ΠΌΠ°Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ
for (i = 0; i < k; i++) printf("%d ", W[i]);
return;
} // ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°
F1(W, R, n + 1, k, N, cnt); // ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ
W[k] = R[n];
F1(W, R, n + 1, k + 1, N, cnt); // ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ
}
//----------------------------------------------------------
// Π‘ΠΎΡΠ΅ΡΠ°Π½ΠΈΠΉ ΠΈΠ· n ΠΏΠΎ m
// m - ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
void F2(int W[], int R[], int n, int k, int N, int m, int &cnt) {
int i;
if (n > N) return; // ΠΏΡΠ΅Π²ΡΡΠ΅Π½Π° ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
if (k == m) { // Π²ΡΠ±ΡΠ°Π½ΠΎ m ΠΈΠ· n
cnt++;
printf("\n");
for (i = 0; i < k; i++) printf("%d ", W[i]);
return;
} // ΠΏΠΎΠ΄ΡΡΠ΅Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ°
F2(W, R, n + 1, k, N, m, cnt); // ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π½Π΅ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ
W[k] = R[n];
F2(W, R, n + 1, k + 1, N, m, cnt); // ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ
}
ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ (ΡΠ΅ΠΏΠΎΡΠΊΠΈ, ΡΠ»ΠΎΠ²Π° ΠΈ Ρ.ΠΏ., Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ) ΠΈΠΌΠ΅Π΅ΡΡΡ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ°. Π Π½Π΅ΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΈΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΠΎΠ½ ΡΠ΄Π°Π»ΡΠ΅ΡΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, Π° ΠΏΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠΈ β Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ.
//----------------------------------------------------------
// ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ
void F3(int W[], int R[], int n, int N, int &cnt) {
int i;
if (n == N) {
cnt++;
printf("\n");
for (i = 0; i < n; i++) printf("%d ", W[i]);
return;
}
for (i = 0; i < N; i++) { // ΡΠΈΠΊΠ» ΠΏΠΎ Π²ΡΠ΅ΠΌ ΠΎΡΡΠ°Π²ΡΠΈΠΌΡΡ
if (R[i] == 0) continue; // ΠΏΡΠΎΠΏΡΡΠΊ ΡΠΆΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ
W[n] = R[i]; // Π²ΡΠ±ΠΎΡ ΠΎΡΡΠ°Π²ΡΠ΅Π³ΠΎΡΡ
R[i] = 0; // ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ
F3(W, R, n + 1, N, cnt);
R[i] = W[n]; // Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠ³ΠΎ
}
}
// ΠΠΎΠ»Π΅Π΅ ΡΠ»Π΅Π³Π°Π½ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅Ρ
// ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΡΠ°Π²ΡΠΈΠΌΠΈΡΡ.
//----------------------------------------------------------
// ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΡΠΌΠΈ - ΠΎΠ±ΠΌΠ΅Π½ Ρ ΠΎΡΡΠ°Π²ΡΠΈΠΌΠΈΡΡ
void F4(int R[], int n, int N, int &cnt) {
int i, c;
if (n == N) {
cnt++;
printf("\n");
for (i = 0; i < n; i++) printf("%d ", R[i]);
return;
}
F4(R, n + 1, N, cnt); // ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΌΠ΅ΡΡΠ΅
for (i = n + 1; i < N; i++) {
c = R[n];
R[n] = R[i];
R[i] = c; // ΠΎΠ±ΠΌΠ΅Π½ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ Ρ ΠΎΡΡΠ°Π²ΡΠΈΠΌΠΈΡΡ
F4(R, n + 1, N, cnt);
c = R[n];
R[n] = R[i];
R[i] = c; // Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ
}
}
ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΊΡΠΎΡΡΠ²ΠΎΡΠ΄. ΠΠ»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΡΠ»ΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΊΡΠΎΡΡΠ²ΠΎΡΠ΄. ΠΡΠ»ΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ Π½Π°ΡΠ°Π»ΠΎΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π² ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΠΊΠ²Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΠΠ’Π ΠΠ‘-Π ΠΠ‘ΠΠ‘Π’), ΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΡΠ»ΠΎΠ²Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π² ΡΠ΅ΠΏΠΎΡΠΊΡ. ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΡΠ°Π²ΠΈΡΡΡ Π·Π°Π΄Π°ΡΠ° - ΠΏΠΎΠ»ΡΡΠΈΡΡ Π»ΡΠ±ΡΡ ΡΠ°ΠΊΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ, ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ - ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ.
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠ° Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ΅ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ Π±Π΅Π· ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠΉ, ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π° Π²ΡΡΠ΅. Π ΡΡΡΠ½ΠΎΡΡΠΈ, Π½ΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ Π½Π° Π΄ΡΡΠ³ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Β«Ρ Π½ΡΠ»ΡΒ» Π΄Π»Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. ΠΠ°ΡΠ°Π»ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠ°Π³Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΡΡΡ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΆΠ΅ ΡΠΎΡΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΡΠ΅ΠΏΠΎΡΠΊΠ° ΠΈΠ· Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ»ΠΎΠ². ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ°Π³ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠΎΡΡΠΎΠΈΡ Π² ΠΏΠΎΠΏΡΡΠΊΠ΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΊ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΈΠ· ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ. ΠΡΠ»ΠΈ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠΎ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠΏΡΡΠΊΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅, ΡΠΎ Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΏΡΡΠΊΡ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° ΠΊ ΡΠΆΠ΅ Π²ΡΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠ΅;
ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Π΄Π°Π½Π½ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΡΡΡΠΎΠΈΡΡ), ΡΡΠ½ΠΊΡΠΈΡ ΠΈΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ;
ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΡΡ ΠΊ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΡΠ»ΠΎΠ² (ΡΡΠΏΠ΅ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅), Π»ΠΈΠ±ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ Π½ΠΈ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΡΠ»ΠΎΠ² (Π½Π΅ΡΠ΄Π°ΡΠ°).
ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΠ»ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ Π΄Π°Π½Π½ΡΡ - ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½ΠΎ ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π²Π°ΡΠΈΠ°Π½ΡΠ° (ΠΏΠΎΡΠ»Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΡΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΡΠΎΠΊΠΈ. ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π±ΡΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°ΡΡΡΡ Π² ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΡΡΠΎΠΊΡ Π½ΡΠ»Π΅Π²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ.
Π Π΅ΡΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅Π»ΠΎΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΠΎΠ±ΡΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ:
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΡΠ°Π³ΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠΈ β ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΎΠ½ΠΎ ΡΠ°Π²Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ;
ΡΠ°ΠΌΠ° ΡΠ΅ΠΏΠΎΡΠΊΠ° Π²ΡΠ±ΡΠ°Π½Π½ΡΡ ΡΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ Π² Π²ΠΈΠ΄Π΅ ΠΏΡΡΠΌΠΎΠ³ΠΎ, ΡΠ°ΠΊ ΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ»ΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠΊΡΠ°Π½ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠ² ΠΏΡΠΈ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ Β«ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ Β» Π²ΠΎΠ·Π²ΡΠ°ΡΠΎΠ². ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΠΎΠ±ΡΠ°Π·Π½ΠΎΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΡ Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅, Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄ ΡΠ»ΠΎΠ²ΠΎΠΌ.
//------------------------------------------------------74-02.cpp
//----- ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΊΡΠΎΡΡΠ²ΠΎΡΠ΄
char *w[] = {"sinus", "prefix", "setup", "plintus", "drop", NULL};
int N = sizeof(w) / sizeof(char *) - 1;
// lw - ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠ»ΠΎΠ²ΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠΈ, s - ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ΅ΠΏΠΎΡΠΊΠ΅
int step(char *lw, int s, int k) {
if (k == N) return 1; // ΠΡΠ΅ ΡΠ»ΠΎΠ²Π° Π²ΡΠ±ΡΠ°Π½Ρ - ΡΡΠΏΠ΅Ρ
for (int n = 0; w[n] != NULL; n++) {
int l = strlen(lw); // ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅
if (w[n][0] == 0) continue; // ΡΠ»ΠΎΠ²ΠΎ ΡΠΆΠ΅ Π²ΡΠ±ΡΠ°Π½ΠΎ - ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ
if (k == 0 ||
lw[l - 1] == w[n][0]) { // ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
char *pw = w[n]; // Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΈ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ
w[n] = ""; // ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°
if (step(pw, s + l - 1,
k + 1)) { // ΠΏΠΎΠΏΡΡΠΊΠ° Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°
for (int i = 0; i < s + l - 1; i++) // ΡΠ΄Π°ΡΠ° - Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ»ΠΎΠ²ΠΎ ΠΈ Π²ΡΠΉΡΠΈ
putchar(' '); // ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°Π³Π° ΡΠ΅ΠΊΡΡΡΠΈΠΈ
puts(pw);
return 1;
}
w[n] = pw; // Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
}
}
return 0;
}
void main() { step("", 1, 0); }
ΠΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ (ΡΠΌ. Π²ΡΡΠ΅) ΠΏΡΠΎΡΡΠΎ ΠΌΠ΅Π½ΡΠ΅Ρ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΎΡΡΠ°Π²ΡΠΈΠΌΠΈΡΡ ΠΏΡΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²:
Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ (i) ΡΠ»ΠΎΠ²Π° ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅;
Π΅ΡΠ»ΠΈ Π½Π°ΡΠ°Π»ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ (j) ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ, ΡΠΎ ΠΎΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ (i+1), ΡΠΎ Π΅ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ°Π΅Ρ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ i+1 ΡΠ»ΠΎΠ²ΠΎ;
Π΅ΡΠ»ΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π½Π΅ ΡΠΌΠΎΠ³ Π΄ΠΎΡΡΡΠΎΠΈΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ, ΡΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ»ΠΎΠ²Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ Π½Π° ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΡΠ°;
ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΠ»ΠΎΠ²Π° Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Ρ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡ ΠΎΠ΄Π° ΠΈΠ· ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (ΡΠΌ. 12.4).
//------------------------------------------------------74-03.cpp
//----- ΠΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΊΡΠΎΡΡΠ²ΠΎΡΠ΄ (ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Ρ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΡΡΡΠΎΠΊ)
char *w[] = {"sinus", "prefix", "setup", "plintus", "drop", NULL};
// k - Π½ΠΎΠΌΠ΅Ρ ΡΠ°Π³Π°
void step(int k) {
if (w[k + 1] == NULL) throw 1; // ΠΡΠ΅ ΡΠ»ΠΎΠ²Π° Π²ΡΠ±ΡΠ°Π½Ρ - ΡΡΠΏΠ΅Ρ
int l = 0;
if (k != -1) l = strlen(w[k]) - 1; // ΠΡΡ
ΠΎΠ΄ ΠΈΠ· ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ²
for (int n = k + 1; w[n] != NULL; n++) // ΡΠ΅ΡΠ΅Π· ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
if (k == -1 ||
w[k][l] == w[n][0]) { // ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΡΠ»ΠΎΠ²ΠΎ
char *q = w[k + 1];
w[k + 1] = w[n];
w[n] = q; // ΠΠ±ΠΌΠ΅Π½ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π°...
step(k + 1); // ΠΏΠΎΠΏΡΡΠΊΠ° Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ΅ΠΏΠΎΡΠΊΡ ΠΈΠ· Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π°
q = w[k + 1];
w[k + 1] = w[n];
w[n] = q; // ΠΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΠ±ΠΌΠ΅Π½ Π΄Π»Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ°
}
}
void main() {
try {
step(-1);
} catch (int v) { // ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ -
for (int s = 0, i = 0; w[i] != NULL;
i++) { // Π²ΡΠ²ΠΎΠ΄ ΡΠ»ΠΎΠ² Β«Π»Π΅ΡΠ΅Π½ΠΊΠΎΠΉΒ» Ρ ΠΏΠΎΠ΄ΡΡΠ΅ΡΠΎΠΌ
for (int j = 0; j < s; j++)
putchar(' '); // ΡΠΈΡΠ»Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ
ΡΠ»ΠΎΠ²Π°Ρ
s += strlen(w[i]) - 1;
puts(w[i]);
}
}
}
ΠΠΎΠ»Π½ΡΠΉ ΠΎΠ±Ρ ΠΎΠ΄ Π³ΡΠ°ΡΠ°. ΠΠ°Π΄Π°ΡΠ° ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΠ΅ΡΠ°. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π° Π²ΡΠ΅Π³ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Β«Π³ΠΎΡΠΎΠ΄ΠΎΠ²Β», Π½Π΅ ΠΏΠΎΡΠ΅ΡΠ°Ρ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π³ΠΎΡΠΎΠ΄ Π΄Π²Π°ΠΆΠ΄Ρ (Π·Π°Π΄Π°ΡΠ° ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΠ΅ΡΠ°). ΠΡΠ° Π·Π°Π΄Π°ΡΠ° ΡΠ΅ΡΠ°Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΡΡ Π΅ΠΌΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠ΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ. Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π΄Π°Π΅Ρ Π·Π΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ:
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠ° β ΠΌΠ°ΡΡΠΈΡΠ° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΡΠ΅Π΄Π½ΠΈΠΌΠΈ Π³ΠΎΡΠΎΠ΄Π°ΠΌΠΈ (R) (ΠΌΠ°ΡΡΠΈΡΠ° ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ), Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Rij β ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΡΡΠΈ.
Π¨Π°Π³ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° β ΠΏΡΠΈ Β«ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠΈΒ» ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ k-Π³ΠΎ Π³ΠΎΡΠΎΠ΄Π° Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠ° Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ ΡΠΎΡΠ΅Π΄ΡΠΌ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ°Π΅ΡΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΡΠΌΠΎΠ΅ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° β Π΄Π»ΠΈΠ½Ρ ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ - lnt ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π° - D, ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ ΠΈ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ±Ρ ΠΎΠ΄Π° (lntmin , Dmin) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΠ±ΠΎΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠΈΡΡΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ (Β«ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎΒ» Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ).
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ°Π³Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° β ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ: Π½ΠΎΠΌΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Β«Π³ΠΎΡΠΎΠ΄Π°Β» (k), ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΡ Π³ΠΎΡΠΎΠ΄ΠΎΠ² (ΡΠ°Π³ΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠΈ- n), Π΄Π»ΠΈΠ½Π° ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ (lnt).
ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ β ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Β«ΡΡΠΏΠ΅Ρ Π°Β»: ΠΏΡΠΎΠΉΠ΄Π΅Π½Ρ Π²ΡΠ΅ Π³ΠΎΡΠΎΠ΄Π° (n ΡΠ°Π²Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ Π·Π°Π΄Π°ΡΠΈ), ΠΎΡΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Β«Π½Π΅ΡΠ΄Π°ΡΒ»: ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Π³ΠΎΡΠΎΠ΄Π°;
ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±Ρ ΠΎΠ΄Π° Π³ΠΎΡΠΎΠ΄ΠΎΠ² β Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π³ ΡΠ΅ΠΊΡΡΡΠΈΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π² Π½Π΅Π΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ β D[n]=k. ΠΠΎ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ°ΠΊΡΠ° ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ Β«ΠΏΠΎΡΠ΅ΡΠ΅Π½ΠΈΡΒ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ² Β«ΠΎΡΠΌΠ΅ΡΠΎΠΊΒ» ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΡ Π³ΠΎΡΠΎΠ΄ΠΎΠ², ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠΆΠ΅ Π½Π΅ ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ ΡΠ°Π³Π° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°, Π° ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ Β«Π³ΠΎΡΠΎΠ΄Π°Β». Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π² Π½Π°ΡΠ°Π»Π΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ³ΠΎ ΡΠ°Π³Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ (M[k]==0) ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ (M[k]=1) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ·Π½Π°ΠΊΠ°, Π° ΠΏΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠΈ - ΡΠ±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π΅Π³ΠΎ.
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ²: ΡΠΈΠΊΠ» ΠΏΠΎ ΡΡΡΠΎΠΊΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ β ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠΎΡΠ΅Π΄Π΅ΠΉ c ΠΏΡΠΎΠΏΡΡΠΊΠΎΠΌ ΡΠ΅Ρ , Π΄ΠΎ ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΏΡΡΠΈ (R[k][i]=0);
ΠΠ°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠ°Π³Π° β ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°: Β«Π½ΠΎΠΌΠ΅Ρ ΡΠΎΡΠ΅Π΄Π½Π΅Π³ΠΎ Π³ΠΎΡΠΎΠ΄Π°Β» - ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠΈΠΊΠ»Π° ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° (i), ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π³ΠΎΠ² ΡΠ΅ΠΊΡΡΡΠΈΠΈ β n+1, Π΄Π»ΠΈΠ½Π° ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ β lnt+R[k][i];
Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² main β step(0,0,0).
//------------------------------------------------------74-04.cpp
//----- ΠΠ°Π΄Π°ΡΠ° ΠΊΠΎΠΌΠΌΠΈΠ²ΠΎΡΠΆΠ΅ΡΠ° - ΠΏΠΎΠ»Π½ΡΠΉ ΠΎΠ±Ρ
ΠΎΠ΄ Π³ΡΠ°ΡΠ°
#define N 5
int R[N][N] = {{0, 4, 2, 0, 0},
{4, 0, 2, 1, 3},
{2, 2, 0, 0, 6},
{0, 1, 0, 0, 1},
{0, 3, 6, 1, 0}};
int M[N] = {0, 0, 0, 0, 0}; // ΠΡΠΌΠ΅ΡΠΊΠ° ΠΏΡΠΎΠΉΠ΄Π΅Π½Π½ΡΡ
"Π³ΠΎΡΠΎΠ΄ΠΎΠ²"
int W[N]; // Π’Π΅ΠΊΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±Ρ
ΠΎΠ΄Π°
int Wmin[N]; // ΠΠΏΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±Ρ
ΠΎΠ΄Π°
int minlnt = -1; // ΠΠ»ΠΈΠ½Π° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ
void step(int n, int k, int lnt) { // n - Π½ΠΎΠΌΠ΅Ρ ΡΠ°Π³Π°, k - Π½ΠΎΠΌΠ΅Ρ "Π³ΠΎΡΠΎΠ΄Π°"
if (n == N) { // lnt - Π΄Π»ΠΈΠ½Π° ΠΏΡΠΎΠΉΠ΄Π΅Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ
if (minlnt == -1 || lnt < minlnt) // ΠΠ±Ρ
ΠΎΠ΄ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½ - ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ
{
minlnt = lnt; // ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΡΡ Π΄Π»ΠΈΠ½Ρ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
for (int i = 0; i < N; i++) // ΠΎΠ±Ρ
ΠΎΠ΄Π°
Wmin[i] = W[i];
}
return;
}
if (M[k] == 1) return; // ΠΠΎΠ²ΡΠΎΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅
W[n] = k; // ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ±Ρ
ΠΎΠ΄Π°
M[k] = 1; // ΠΡΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠΎΡ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅
for (int i = 0; i < N; i++) { // ΠΡΠΎΡΠΌΠΎΡΡ ΡΠΎΡΠ΅Π΄Π΅ΠΉ
if (R[k][i] == 0) continue; // Π‘ΠΎΡΠ΅Π΄ΠΈ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ - ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ
step(n + 1, i, lnt + R[k][i]); // Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΡΠΎΡΠ΅Π΄Π½Π΅Π³ΠΎ
} // "Π³ΠΎΡΠΎΠ΄Π°" Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ Π΄ΠΎ Π½Π΅Π³ΠΎ
M[k] = 0;
} // Π‘Π±ΡΠΎΡΠΈΡΡ ΠΎΡΠΌΠ΅ΡΠΊΡ
void main() {
step(0, 0, 0);
printf("\nmin=%d\ntowns:", minlnt);
for (int i = 0; i < N; i++) printf("%d-", Wmin[i]);
}
ΠΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠ° Ρ ΠΏΠ΅ΡΠ΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π΄Π²ΡΡ Π΅ΠΌΠΊΠΎΡΡΠ΅ΠΉ 3 ΠΈ 5 Π»ΠΈΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡΡ 4 Π»ΠΈΡΡΠ°. Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° Β«ΡΠ°Π·Π»ΠΈΠ²Π°Β» (Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΅ΠΌΠΊΠΎΡΡΠ΅ΠΉ) ΠΈΠΌΠ΅Π΅ΡΡΡ 6 ΡΠΌΠ΅ΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ), ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ:
Π²ΡΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΆΠΈΠ΄ΠΊΠΎΡΡΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅ΠΌΠΊΠΎΡΡΠ΅ΠΉ;
Π΄ΠΎΠ»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΆΠΈΠ΄ΠΊΠΎΡΡΠΈ Π² ΠΎΠ΄Π½Ρ ΠΈΠ· Π΅ΠΌΠΊΠΎΡΡΠ΅ΠΉ (Π΄ΠΎ ΠΊΡΠ°Ρ);
ΠΏΠ΅ΡΠ΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΆΠΈΠ΄ΠΊΠΎΡΡΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡΠΈ Π² Π΄ΡΡΠ³ΡΡ c ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΆΠΈΠ΄ΠΊΠΎΡΡΠΈ ΠΎΡΡΠ°Π»ΠΎΡΡ Π² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡΠΈ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΡΠ° Π΅ΡΡΡ Π² Π΄ΡΡΠ³ΠΎΠΉ (ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ).
ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ°Π·Π»ΠΈΠ²Π° Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΎΡΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π±ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Ρ Β«ΠΏΡΡΠΌΡΠΌΒ» Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ. ΠΠ°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΎΡΡΠ΅ΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠΎΠ³ΠΎ ΡΠ°ΠΊΡΠ°, ΡΡΠΎ ΡΠ΅ΠΊΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π΄Π»ΠΈΠ½Π½Π΅Π΅ ΡΠΆΠ΅ ΠΈΠΌΠ΅ΡΡΠ΅ΠΉΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ.
//----------------------------------------------------74-05.cpp
// ΠΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠ°: Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π±Π°Π½ΠΎΠΊ 3 ΠΈ 5 Π»ΠΈΡΡΠΎΠ² ΠΏΠΎΠ»ΡΡΠΈΡΡ 4 Π»ΠΈΡΡΠ°
#define P1 3 // ΠΠΌΠΊΠΎΡΡΠΈ Π±Π°Π½ΠΎΠΊ
#define P2 5
#define EX 4 // ΠΡΠΊΠΎΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
#define N 1000
struct var {
int nmax; // ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ
int V[N][2]; // ΠΠ°ΡΠΈΠ°Π½Ρ "ΡΠ°Π·Π»ΠΈΠ²Π°"
int D[N]; // Π‘Π»Π΅Π΄ΡΡΡΠ΅Π΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅
} VAR, OPT = {-1};
int cnt = 0; // Π‘ΡΠ΅ΡΡΠΈΠΊ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ²
void F(int v1, int v2, int n) { // v1,v2 - ΡΠ΅ΠΊΡΡΠ΅Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ "Π±Π°Π½ΠΎΠΊ"
VAR.V[n][0] = v1; // Π‘ΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Π°ΡΠΈΠ°Π½ΡΠ° "ΡΠ°Π·Π»ΠΈΠ²Π°"
VAR.V[n][1] = v2;
VAR.D[n] = 0;
if (v2 == EX) {
if (OPT.nmax == -1 || n < OPT.nmax) OPT = VAR, OPT.nmax = n;
return;
} // ΠΠ°ΠΉΠ΄Π΅Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
if (OPT.nmax != -1 && n >= OPT.nmax)
return; // ΠΡΡΡ ΡΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
cnt++;
for (int i = 0; i < n; i++) // ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ "ΡΠ°Π·Π»ΠΈΠ²Π°"
if (VAR.V[i][0] == v1 && VAR.V[i][1] == v2) return;
// ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ - Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠΏΡΡΡΠΎΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ "Π±Π°Π½ΠΊΠΈ"
VAR.D[n]++;
F(P1, v2, n + 1);
VAR.D[n]++;
F(v1, P2, n + 1);
VAR.D[n]++;
F(0, v2, n + 1);
VAR.D[n]++;
F(v1, 0, n + 1);
// ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ - ΠΏΠ΅ΡΠ΅Π»ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ "Π±Π°Π½ΠΊΠΈ" Π² Π΄ΡΡΠ³ΡΡ
// ΠΠ±ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π»ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΆΠΈΠ΄ΠΊΠΎΡΡΠΈ -
// ΠΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ· ΠΎΡΡΠ°ΡΠΊΠ° Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ° Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ
int dv = (v1 < P2 - v2 ? v1 : P2 - v2);
VAR.D[n]++;
if (dv != 0) F(v1 - dv, v2 + dv, n + 1);
dv = (P1 - v1 < v2 ? P1 - v1 : v2);
VAR.D[n]++;
if (dv != 0) F(v1 + dv, v2 - dv, n + 1);
}
ΠΠ°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΡΠΉ ΠΏΡΠ°ΠΊΡΠΈΠΊΡΠΌ
Π’ΡΠΎΠΉΠΊΠΈ ΠΈ ΡΠ΅ΠΌΠ΅ΡΠΊΠΈ. ΠΠ°ΠΊΠΎΠ΅ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΎ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡ 3 ΠΈ 7 ΠΈ ΡΡΠΎ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ, ΡΠ°ΠΊ ΠΈ ΡΡΠΌΠΌΠ° Π΅Π³ΠΎ ΡΠΈΡΡ Π΄Π΅Π»ΡΡΡΡ Π½Π° 3 ΠΈ 7? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 7 733 733 Π΄Π΅Π»ΠΈΡΡΡ Π±Π΅Π· ΠΎΡΡΠ°ΡΠΊΠ° Π½Π° 3 ΠΈ Π½Π° 7, Π½ΠΎ ΡΡΠΌΠΌΠ° Π΅Π³ΠΎ ΡΠΈΡΡ (33) Π½Π° 3 Π΄Π΅Π»ΠΈΡΡΡ, Π° Π½Π° 7 Π½Π΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ°Π΄Π°ΡΠ° ΠΎ Π΄Π΅ΡΡΡΠΈ ΡΠΈΡΡΠ°Ρ . Π Π°ΡΡΡΠ°Π²ΡΡΠ΅ Π²ΡΠ΅ Π΄Π΅ΡΡΡΡ ΡΠΈΡΡ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 Π² ΡΠ°ΠΊΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π΅ΡΡ ΡΠΈΡΠ»ΠΎ Π΄Π΅Π»ΠΈΠ»ΠΎΡΡ Π½Π° Π²ΡΠ΅ ΡΠΈΡΠ»Π° ΠΎΡ 2 Π΄ΠΎ 18. ΠΡΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠΈΡΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ 1 274 953 680, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠ΅Π΅ΡΡ ΡΠΈΡΠ»ΠΎ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»ΠΈΡΡΡΡ Π½Π° 2, 3, 4, 5 ΠΈ Ρ. Π΄. Π΄ΠΎ 16, Π½ΠΎ Π½Π΅ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡΡ Π½Π° 17.
ΠΠ΅ΠΆΠ΄Ρ ΡΠΈΡΡΠ°ΠΌΠΈ ΠΎΡ 1 Π΄ΠΎ 9 ΡΠ°ΡΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ +,-,*,/ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ.
ΠΠ΅ΠΆΠ΄Ρ ΡΠΈΡΡΠ°ΠΌΠΈ ΠΎΡ 1 Π΄ΠΎ 9 ΡΠ°ΡΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ +,- ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, ΠΈΠ· ΠΏΠΎΠ΄ΡΡΠ΄ ΠΈΠ΄ΡΡΠΈΡ ΡΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π½Π°ΡΠ½ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ 123-45+7+8-9.
Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠΎΡΠΊΠΈ ΠΈΠ· ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎΡΡ Π½Π°Π±ΠΎΡΠ° ΠΊΠΎΡΡΠ΅ΠΉ Π΄ΠΎΠΌΠΈΠ½ΠΎ.
ΠΠ° ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ N ΡΠΈΠ³ΡΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°. Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π½Π° Π½Π΅ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½Π΅ΠΉ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠΈΠ³ΡΡΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Β«ΠΏΠΎΠ΄ Π±ΠΎΠ΅ΠΌΒ».
ΠΠ° ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ N ΡΠΈΠ³ΡΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°. Π Π°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π½Π° Π½Π΅ΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ»ΠΎΠ½ΠΎΠ² ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ ΡΠΈΠ³ΡΡΡ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ° Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Β«ΠΏΠΎΠ΄ Π±ΠΎΠ΅ΠΌΒ».
ΠΠΌΠ΅Π΅ΡΡΡ 2 ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² A ΠΈ B, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, AAABAB ΠΈ ABAABBB. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΡ ΡΡΡΠΎΠΊ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΠ°Π²ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄ (ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠ΅ΡΠ²ΠΎΠΉ (Π²ΡΠΎΡΠΎΠΉ) ΡΡΡΠΎΠΊΠΈ, Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠΈΠΌΠ²ΠΎΠ» A(B) Π² ΡΠ΅ΠΊΡΡΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠΉ (Π²ΡΠΎΡΠΎΠΉ) ΡΡΡΠΎΠΊΠΈ. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ Π΄Π»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΡΠΎΠΊ.
ΠΠ°Π΄Π°Π½ ΡΠ»ΠΎΠ²Π°ΡΡ ΠΈ ΡΠ»ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Β«Π±Π°ΡΠ°ΠΊ, Π±Π°ΡΠ°Π½, Π±Π°Π½Π°Π½, Π΄ΡΡΠ°ΠΊ, Π±ΡΡΠΎΠ½, Π±ΡΡΠ°Π½, ΠΏΠΈΡΠΎΠ½, Π±Π°ΡΠΈΠ½Β». ΠΠ»Ρ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°ΡΡ ΡΠ»ΠΎΠ² ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ»ΠΎΠ²ΠΎ ΠΎΡΠ»ΠΈΡΠ°Π»ΠΎΡΡ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° 2 Π±ΡΠΊΠ²Ρ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ΅ΠΊΡΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ² Π²ΠΈΠ΄Π° ...(ΠΠ²Π°Π½,ΠΠ΅ΡΡ,Π€Π΅Π΄ΠΎΡ=ΠΠΈΠ»-Π±ΡΠ» (ΡΠΈΠ½Π΅Π³ΠΎ,Π±Π΅Π»ΠΎΠ³ΠΎ,ΠΆΠ΅Π»ΡΠΎΠ³ΠΎ= Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΌΠΎΡΡ)).... Π‘ΠΈΠΌΠ²ΠΎΠ» Β«*Β» ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠΌΠ΅Π½ΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° Π² ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠ΅ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°. ΠΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠ². ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΡΡ ΡΡΡΠΎΠΊΡ.
ΠΠ°Π΄Π°Π½ Π½Π°Π±ΠΎΡ ΡΠ»ΠΎΠ² (ΠΌΠ°ΡΡΠΈΠ² ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΡΡΠΎΠΊΠΈ). ΠΠΎΡΡΡΠΎΠΈΡΡ ΠΈΠ· Π½ΠΈΡ Π»ΡΠ±ΡΡ ΡΠ΅ΠΏΠΎΡΠΊΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΠΈΠΌΠ²ΠΎΠ» Π² Π½Π°ΡΠ°Π»Π΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π» Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ (Π½Π΅ ΠΏΠ΅ΡΠ²ΡΠΌ ΠΈ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ). ΠΡΠΈ Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΡΠ»ΠΎΠ²Π° Ρ ΠΎΡΡΡΡΠΏΠΎΠΌ ΠΎΡ Π½Π°ΡΠ°Π»Π° ΡΡΡΠΎΠΊΠΈ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π±ΡΠΊΠ².
ΠΠ°Π΄Π°ΡΠ° ΡΠ°ΡΠΊΡΠ°ΡΠΊΠΈ ΠΊΠ°ΡΡΡ. Π‘ΡΡΠ°Π½Ρ Π½Π° ΠΊΠ°ΡΡΠ΅ Π·Π°Π΄Π°Π½Ρ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ ΡΡΡΠ°Π½Ρ i,j ΠΈΠΌΠ΅ΡΡ Π½Π° ΠΊΠ°ΡΡΠ΅ ΠΎΠ±ΡΡΡ Π³ΡΠ°Π½ΠΈΡΡ, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ A[i,j] ΡΠ°Π²Π΅Π½ 1, ΠΈΠ½Π°ΡΠ΅ 0. Π‘ΠΌΠ΅ΠΆΠ½ΡΠ΅ ΡΡΡΠ°Π½Ρ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ°. Β«Π Π°ΡΠΊΡΠ°ΡΠΈΡΡΒ» ΠΊΠ°ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΠ²Π΅ΡΠΎΠ² (Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ Π² progrramms/randomatrix.cpp).
ΠΠ°Π΄Π°ΡΠ° ΠΎ ΡΠ°Π·Π½ΠΎΡΠ²Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄Π°Ρ . ΠΠΌΠ΅Π΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ·Π»ΠΎΠ² ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ ΡΠ·Π»Ρ i,j ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ A[i,j] ΡΠ°Π²Π΅Π½ 1, ΠΈΠ½Π°ΡΠ΅ 0. ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΎΠ² ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠ²Π΅ΡΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ·Π»Π΅ Π½Π΅ Π±ΡΠ»ΠΎ Π΄Π²ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΡ ΡΠ²Π΅ΡΠΎΠ² (Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ Π² progrramms/randomatrix.cpp).
ΠΠ°Π΄Π°ΡΠ° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π³ΡΠ°Π½ΠΈΡΡ Π½Π° ΠΊΠ°ΡΡΠ΅ (Β«ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΎΠ΅Π½Π½ΡΡ Π±Π»ΠΎΠΊΠΎΠ²Β»). Π‘ΡΡΠ°Π½Ρ Π½Π° ΠΊΠ°ΡΡΠ΅ Π·Π°Π΄Π°Π½Ρ ΠΌΠ°ΡΡΠΈΡΠ΅ΠΉ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ. ΠΡΠ»ΠΈ ΡΡΡΠ°Π½Ρ i,j ΠΈΠΌΠ΅ΡΡ Π½Π° ΠΊΠ°ΡΡΠ΅ ΠΎΠ±ΡΡΡ Π³ΡΠ°Π½ΠΈΡΡ, ΡΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΡΡ A[i,j] ΡΠ°Π²Π΅Π½ 1, ΠΈΠ½Π°ΡΠ΅ 0. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°Π·Π±ΠΈΡΡ ΡΡΡΠ°Π½Ρ Π½Π° Π΄Π²Π΅ Π³ΡΡΠΏΠΏΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠ°Ρ ΡΠΌΠ΅ΠΆΠ½ΡΡ ΡΡΡΠ°Π½ ΠΈΠ· ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΡ Π³ΡΡΠΏΠΏ Π±ΡΠ»ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ (Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΌΠ°ΡΡΠΈΡΡ ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡΠΈ Π² progrramms/randomatrix.cpp).
16 ΠΊΠΎΡΠ·ΠΈΠ½ ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ ΠΏΠΎ ΠΊΡΡΠ³Ρ. ΠΠΎΠΆΠ½ΠΎ Π»ΠΈ Π² Π½ΠΈΡ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ 55 Π°ΡΠ±ΡΠ·ΠΎΠ² ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΡΠ±ΡΠ·ΠΎΠ² Π² Π»ΡΠ±ΡΡ Π΄Π²ΡΡ ΡΠΎΡΠ΅Π΄Π½ΠΈΡ ΠΊΠΎΡΠ·ΠΈΠ½Π°Ρ ΠΎΡΠ»ΠΈΡΠ°Π»ΠΎΡΡ Π½Π° 1?.
Π ΠΊΠ»Π΅ΡΠΊΠ°Ρ ΡΠ°Ρ ΠΌΠ°ΡΠ½ΠΎΠΉ Π΄ΠΎΡΠΊΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° N \times N Π·Π°ΠΏΠΈΡΠ°Π½Ρ ΠΏΠΎ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠΌ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΡΠ΅Π»ΡΠ΅ ΡΠΈΡΠ»Π° ΠΎΡ 1 Π΄ΠΎ N^2. ΠΠ° Π΄ΠΎΡΠΊΠ΅ ΡΠ°ΡΡΡΠ°Π²Π»Π΅Π½Ρ N ΡΠ΅ΡΠ·Π΅ΠΉ, Β«Π½Π΅ Π±ΡΡΡΠΈΡ Β» Π΄ΡΡΠ³ Π΄ΡΡΠ³Π°. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠ°ΠΆΠ΄ΡΠ΅ Π΄Π²Π΅ ΠΊΠ»Π΅ΡΠΊΠΈ, Π·Π°Π½ΡΡΡΠ΅ ΡΠ΅ΡΠ·ΡΠΌΠΈ, Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π½Π° ΡΠ°Π·Π½ΡΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΡ , Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΡ ΠΈ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΡ . ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΡΡΠΌΠΌΡ ΡΠΈΡΠ΅Π» Π²ΠΎ Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π½Π°Π±ΠΎΡΠ°Ρ Π΄Π»Ρ N = 10, N = 20 ΠΈ N = 30.
Π‘ΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ Π½Π°Π±ΠΎΡΠΎΠ² ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΡΡ ΡΠΈΡΠ΅Π», ΡΡΠΌΠΌΠ° ΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π²Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ ΡΠΈΡΠ»Ρ N, Π²ΡΠ±ΡΠ°Π½ ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² Π½Π΅Π³ΠΎ ΡΠΈΡΠ΅Π». ΠΠ°ΠΉΠ΄ΠΈΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π½Π°ΡΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ, Π±ΠΎΠ»ΡΡΠ΅Π΅ 1, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½Π΅ Π²Ρ ΠΎΠ΄ΠΈΡ Π² ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π½Π°Π±ΠΎΡ. ΠΠΎΠ»ΡΡΠΈΡΠ΅ ΠΎΡΠ²Π΅Ρ Π΄Π»Ρ N = 500, N = 700 ΠΈ N = 902. ΠΡΠ²Π΅Ρ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ Π±Π΅Π· ΠΏΡΠΎΠ±Π΅Π»Π°
ΠΠΎΠΏΡΠΎΡΡ Π±Π΅Π· ΠΎΡΠ²Π΅ΡΠΎΠ²
Π‘ΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΎΡΠΌΡΠ»ΠΈΡΡΠΉΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠΊΠ°ΠΆΠΈΡΠ΅ Π² ΡΠ΅ΡΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΈΠ΅ΠΌΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠ΅Π½ΠΈΡΠ΅ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° (Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅ΡΠΊΠΈ). ΠΠΎΠ±Π°Π²ΡΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² (ΠΈΠ»ΠΈ Π±Π°Π·ΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ β ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΠΌΠ΅Π½Π°). Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ³ΠΎ Π·Π°Π΄Π°Π½ΠΈΡ.
//----------------------------------------------------------------------
void FF(int A[], int n) {
if (n == 1) return;
for (int j = 1, k = 0; j < n; j++)
if (A[j] > A[k]) k = j;
int v = A[k];
A[k] = A[n - 1];
A[n - 1] = v;
FF(A, n - 1);
}
ΠΡΠ½ΠΎΠ²Ρ ΡΠ΅ΡΡΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½Π°Ρ ΡΠ΅ΠΊΡΡΡΠΈΡ: ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΡ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ Π½Π° 1. Π€ΡΠ½ΠΊΡΠΈΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈ ΠΌΠ΅Π½ΡΠ΅Ρ Π΅Π³ΠΎ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠ΅Π±Ρ Π΄Π»Ρ ΡΠ°ΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Π°, Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΡΠ΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° Π²ΡΠ±ΠΎΡΠΎΠΌ. Π Π΅ΠΊΡΡΡΠ΅Π½ΡΠ½Π°Ρ ΡΠΎΡΠΌΡΠ»Π° ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ°Π³Π° ΡΠ΅ΠΊΡΡΡΠΈΠΈ - T_N=T_{N-1} + N, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΠ°Ρ ΡΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ - T=N^2/2, ΡΡΠΈΡΡΠ²Π°Ρ, ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ - N-1, ΠΈ T_N=T_{N-1} +N-1, ΠΏΠΎΠ»ΡΡΠΈΠΌ T=N(N-1)/2.
int FF(int A[], int n) { // Π’ΡΡΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡΡ m β ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ
if (n == 1) return 0; // ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠΈ
for (int m = 0, j = 1, k = 0; j < n;
j++, m++) // ΠΠ°ΠΉΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅
if (A[j] > A[k]) k = j;
int v = A[k];
A[k] = A[n - 1];
A[n - 1] = v; // ΠΠ±ΠΌΠ΅Π½ΡΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ
return FF(A, n - 1) + m;
} // Π Π΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ·ΠΎΠ² Π΄Π»Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ, ΠΌΠ΅Π½ΡΡΠ΅ΠΉ Π½Π° 1
void main() {
int v = 0, B[10] = {4, 8, 3, 4, 8, 2, 3, 8, 3, 6};
printf("T=%d\n", FF(B, 10));
for (int i = 0; i < 10; i++) printf("%d ", B[i]);
}
//------------------------------------------------------74-06.cpp
//------------------------------------------------------ 1
int F1(int n) {
if (n == 1) return 1;
return (n * F1(n - 1));
}
//------------------------------------------------------ 2
int F2(int A[], int a, int b) {
if (a > b) return 0;
if (a == b) return A[a];
int m = (a + b) / 2;
int v1 = F2(A, a, m), v2 = F2(A, m + 1, b);
return v1 > v2 ? v1 : v2;
}
//------------------------------------------------------ 3
int F3(int A[], int a, int b) {
if (a > b) return 0;
if (a == b) return A[a];
int m = (a + b) / 2;
return F3(A, a, m) + F3(A, m + 1, b);
}
//------------------------------------------------------ 4
void F4(int A[], int a, int b) {
int i, j, mode;
if (a >= b) return;
for (i = a, j = b, mode = 1; i != j; mode > 0 ? i++ : j--)
if (A[i] > A[j]) {
int c;
c = A[i];
A[i] = A[j];
A[j] = c;
mode = -mode;
}
F4(A, a, i - 1);
F4(A, i + 1, b);
}
//------------------------------------------------------ 5
int F5(int A[], int a, int b, int val) {
int i, j, mode;
if (a >= b) return -1;
int m = (a + b) / 2;
if (val == A[m]) return m;
if (val < A[m]) return F5(A, a, m - 1, val);
return F5(A, m + 1, b, val);
}
//------------------------------------------------------ 6
long F6(int n) {
if (n == 0 || n == 1) return 1;
return F6(n - 1) + F6(n - 2);
}
//------------------------------------------------------ 7
char *F7(char *p, char *s) {
if (*s == '\0') return p;
*p++ = *s;
p = F7(p, s + 1);
*p++ = *s;
return p;
}
void z7() {
char *q, S[80];
*F7(S, "abcd") = 0;
}
//------------------------------------------------------ 8
void F8(char *&p, char *s) {
if (*s == '\0') return;
*p++ = *s;
F8(p, s + 1);
*p++ = *s;
}
void z8() {
char *q, S[80];
q = S;
F8(q, "abcd");
*q = 0;
}
//------------------------------------------------------ 9
double F9(double *pk, double x, int n) {
if (n == 0) return (*pk);
return *pk + x * F9(pk + 1, x, n - 1);
}
void z9() {
double
B[] = {5., 0.7, 4., 3.},
X = 3.,
Y = F9(B, X, 4);
}
//------------------------------------------------------ 10
void F10(int *p, int nn) {
if (nn == 1) {
*p = 0;
return;
}
for (int i = 2; nn % i != 0; i++)
;
*p = i;
F10(p + 1, nn / i);
}