ΠΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌ
ΠΡΠΈΡΡΠΎΡΠΈΠ΄Π΅Ρ Π. Π’Π΅ΠΎΡΠΈΡ Π³ΡΠ°ΡΠΎΠ². ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄. Π.: ΠΠΈΡ, 1978. ΠΠ°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄ΠΎ Π²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π² Π³ΡΠ°ΡΠ΅. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏpΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Ρ Π·Π°Π³Π»Π°Π²Π½ΡΠΌ Π·Π²Π΅Π½ΠΎΠΌ. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΡΡ ΠΠ°ΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΠΠ€ ΠΈ ΠΠΠ€ ΡΡΠ½ΠΊΡΠΈΠΈ: ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ Π·Π²Π΅Π½Π° ΡΠΎΡ ΡΠ°Π½Ρ; ΠΠ°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ ΠΈΠ· S Π² T Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ. ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΠΏΠΎΠ»Ρ A, B, C… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠΎΠ΄Π΅Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
http://www..ru/
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 1
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 2
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 4
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 5
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 6
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 1
ΠΠΎΡΡΡΠΎΠΈΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π°Π»Π³Π΅Π±ΡΡ Π»ΠΎΠ³ΠΈΠΊΠΈ, Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π Π°ΡΠΏΠΈΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌ ΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ Π½Π°Π±ΠΎΡΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ 3 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ , ΠΏΠΎΡΡΠΈΡΠ°Π΅ΠΌ ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ:
xyz | x|z | x|y | x V y V z | (x|z)(x|y) | f | |
Π€ΡΠ½ΠΊΡΠΈΡ ΡΠΎΠΆΠ΄Π΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0 ΠΏΡΠΈ Π»ΡΠ±ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ x, y, z. ΠΠΎΡΡΠΎΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π΅Ρ.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 2
ΠΠΎΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ ΠΠ΅Π³Π°Π»ΠΊΠΈΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΈ:
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΠ°ΠΏΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ°Π±Π»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
xyz | f | |
ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π‘ΠΠΠ€ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌ:
Π‘ΠΠΠ€ ΡΡΠ½ΠΊΡΠΈΠΈ:
ΠΠΎΠ»ΠΈΠ½ΠΎΠΌ ΠΠ΅Π³Π°Π»ΠΊΠΈΠ½Π°:
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 3
ΠΠ°ΠΉΡΠΈ Π‘ΠΠΠ€ ΠΈ Π‘ΠΠΠ€ ΡΡΠ½ΠΊΡΠΈΠΈ:
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΠ°ΠΉΠ΄Π΅ΠΌ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ:
xyz | xy | f | ||
ΠΠΎΠ»ΡΡΠΈΠΌ Π‘ΠΠΠ€ (Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ) ΠΈ Π‘ΠΠΠ€ (Π½ΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ):
Π‘ΠΠΠ€ (Π΅Π΄ΠΈΠ½ΠΈΡΡ):
Π‘ΠΠΠ€ (Π½ΡΠ»ΠΈ):
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 4
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ°ΡΡ ΠΠ°ΡΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΠΠ€ ΠΈ ΠΠΠ€ ΡΡΠ½ΠΊΡΠΈΠΈ:
Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΠ°ΠΏΠΈΡΠ΅ΠΌ ΠΊΠ°ΡΡΡ ΠΠ°ΡΠ½ΠΎ:
zt | |||||
xy | |||||
ΠΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΌΡ:
ΠΠΠ€ (ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΏΠΎ Π½ΡΠ»ΡΠΌ):
ΠΠΠ€ (ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΏΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌ):
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 5
ΠΡΠΈΠ΄ΡΠΌΠ°ΡΡ ΡΠ²ΡΠ·Π½ΡΠΉ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π³ΡΠ°Ρ ΠΈΠ· ΠΏΡΡΠΈ Π²Π΅ΡΡΠΈΠ½ ΠΈ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ ΡΠ΅ΠΌΠΈ ΡΠ΅Π±Π΅Ρ (ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ Π²ΡΠ΅ ΡΠ΅Π±ΡΠ°). ΠΠ»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° ΡΠΎΡΡΠ°Π²ΠΈΡΡ ΡΡΡΡΠΊΡΡΡΠ½ΡΡ ΠΌΠ°ΡΡΠΈΡΡ, ΠΏΠΎ Π½Π΅ΠΉ (ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ Π±ΡΠ»Π΅Π²ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ) Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΠΏΡΡΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ Π»ΡΠ±ΡΠΌΠΈ Π½Π΅ΡΠΌΠ΅ΠΆΠ½ΡΠΌΠΈ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ Π½Π° Π²Π°Ρ Π²ΡΠ±ΠΎΡ Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π’Π°Π±Π»ΠΈΡΠ°:
ΠΡΡΠΈ ΠΈΠ· 1 Π² 4:
1. 1−3-4
2. 1−2-4
ΠΠ°Π΄Π°Π½ΠΈΠ΅ 6
ΠΡΠΈΠ΄ΡΠΌΠ°ΡΡ ΡΠ²ΡΠ·Π½ΡΠΉ Π²Π·Π²Π΅ΡΠ΅Π½Π½ΡΠΉ Π³ΡΠ°Ρ ΠΈΠ· Π²ΠΎΡΡΠΌΠΈ Π²Π΅ΡΡΠΈΠ½ ΠΈ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΡΠ΅ΠΌ 14 ΡΠ΅Π±Π΅Ρ (Π½ΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΠ΅Π±Π΅Ρ — ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ, Π²Π΅ΡΠ° ΠΎΡ 1 Π΄ΠΎ 20). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ° ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΎΡΡΡΠΎΠ²Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΡΠΈΠΌΠ°, ΠΈ Π½Π°ΠΉΡΠΈ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΠ½Π°ΠΌΠΈ 1 ΠΈ 8 Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ΅ΠΉΠΊΡΡΡΡ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π°Π»Π³Π΅Π±ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ° Π³ΡΠ°Ρ ΠΏΠΎΠ»ΠΈΠ½ΠΎΠΌ Π΄Π΅ΠΉΠΊΡΡΡΠ° Π Π΅ΡΠ΅Π½ΠΈΠ΅
Π’Π΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΠ΅ΠΉΠΊΡΡΡΠ°
//—————————————————————————————————————;
#include
#pragma hdrstop
//—————————————————————————————————————;
#pragma argsused
//ΠΠ°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄ΠΎ Π²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π² Π³ΡΠ°ΡΠ΅
//Ρ Π½Π΅ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π²Π΅ΡΠ°ΠΌΠΈ (ΠΌΠ΅ΡΠΎΠ΄ ΠΠ΅ΠΉΠΊΡΡΡΡ).
//ΠΠ°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ ΠΈΠ· S Π² T.
#include
#define MaxNodes 14
#define B 1000 //ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΡΡΠΈ.
//ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΡΠ·Π»Π° ΡΡΠ΅ΠΊΠ°.
typedef struct Zveno *svqz;
struct Zveno
{
int Element;
svqz Sled;
};
class Spisok
{
private:
int A[MaxNodes][MaxNodes]; //ΠΠ°ΡΡΠΈΡΠ° Π²Π΅ΡΠΎΠ² Π΄ΡΠ³.
int D[MaxNodes]; //ΠΠ°ΡΡΠΈΡΠ° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄ΠΎ
//Π²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ°.
svqz Stack; //Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΡΠ΅ΠΊ.
void UDALENIE (svqz *, int *);
void W_S (svqz *, int);
int Pusto_Q (int *);
public:
Spisok () {Stack = NULL;}
void Vvod_Ves ();
void Reshenie ();
};
void main ()
{
Spisok A;
A.Vvod_Ves ();
A.Reshenie ();
}
int Spisok: Pusto_Q (int *Q)
{
for (int i=0;i
if (*(Q+i)≠0) return 0; //ΠΠΎΠΆΡ — Π½Π΅ ΠΏΡΡΡΠΎ!
return 1; //ΠΡΡΠΈΠ½Π° — ΠΏΡΡΡΠΎ!
}
void Spisok: Reshenie ()
{
int S; // ΠΠ°ΡΠ°Π»ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΠ½Π° ΠΏΡΡΠΈ (ΠΈΡΡΠΎΡΠ½ΠΈΠΊ).
int T; // ΠΠΎΠ½Π΅ΡΠ½Π°Ρ Π²Π΅ΡΡΠΈΠ½Π° ΠΏΡΡΠΈ.
int u, v, Min;
int i, j, k;
svqz UkZv;
int Q[MaxNodes];
cout << «input source: «;
cin >> S; S—;
//ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ.
for (i=0;i
D[S] = 0;
for (i=0;i
Q[S] = 0;
//ΠΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΎΡ
//ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° Π΄ΠΎ Π²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ°.
while (!Pusto_Q (&Q[0])) //ΠΠΎΠΊΠ° Q Π½Π΅ ΠΏΡΡΡΠΎ.
{
Min = B;
for (i=0;i
if (Q[i]==1 && D[i]
Q[u] = 0;
for (i=0;i
if (Q[i] == 1)
if (D[i] > D[u]+A[u][i]) D[i] = D[u] + A[u][i];
}
//ΠΡΠ²ΠΎΠ΄ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°
//Π΄ΠΎ Π²ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ°.
cout << «matrix of distanses: n» ;
for (i=0;i<< D[i] << ««;
cout << endl;
// ——————————————————————————;
// ΠΠ°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ ΠΈΠ· S Π² T Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ
// ΠΏΠΎΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΠΌΠ°ΡΡΠΈΡΡ ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΠΉ.
// ——————————————————————————;
cout << «Inpute finish node: «;
cin >> T; T—;
W_S (&Stack, T); v = T;
while (v≠S)
{
for (i=0;i
if (D[v]==D[i]+A[i][v]) u = i;
W_S (&Stack, u);
v = u;
}
//ΠΡΠ²ΠΎΠ΄ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅Π³ΠΎ ΠΏΡΡΠΈ Π½Π° ΡΠΊΡΠ°Π½ Π΄ΠΈΡΠΏΠ»Π΅Ρ.
cout << «Minimal path: «;
UkZv = Stack;
while (UkZv ≠ NULL)
{ cout << (UkZv->Element+1) << ««;
UkZv = UkZv->Sled; }
cout << endl;
}
void Spisok: Vvod_Ves ()
//ΠΠ²ΠΎΠ΄ ΠΌΠ°ΡΡΠΈΡΡ Π²Π΅ΡΠΎΠ² Π΄ΡΠ³ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³ΡΠ°ΡΠ°.
{
cout << «Inppute the elements of edge matrix by strings: n» ;
for (int i=0;i
for (int j=0;j
{
cout << «Inpute A[» << (i+1) << «,» << (j+1) << «: «;
cin >> A[i][j];
if (A[i][j]==0) A[i][j] = B;
}
}
void Spisok: W_S (svqz *stk, int Elem)
//ΠΠΎΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Elem Π² ΡΡΠ΅ΠΊ stk.
{
svqz q=new (Zveno);
(*q).Element = Elem;
(*q).Sled = *stk; *stk = q;
}
void Spisok: UDALENIE (svqz *stk, int *Klad)
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π·Π²Π΅Π½Π° ΠΈΠ· ΡΡΠ΅ΠΊΠ°, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΌ *stk.
//ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΡΠ΄Π°Π»ΡΠ΅ΠΌΠΎΠ³ΠΎ Π·Π²Π΅Π½Π° ΡΠΎΡ ΡΠ°Π½Ρ;
//Π΅ΡΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ΅ Klad.
{
svqz q;
if (*stk==NULL) cout<<" try to select from the empty stack! n" ;
else
{ *Klad = (**stk).Element;
q = *stk; *stk = (**stk).Sled; delete q; }
}
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΡΠΈΠΌΠ°:
//—————————————————————————————————————;
#include
#pragma hdrstop
//—————————————————————————————————————;
#pragma argsused
#include
#define TRUE 1
#define FALSE 0
typedef int Boolean;
typedef unsigned int SubInt;
typedef struct Uzel *Ref;
struct Uzel
{
SubInt X; //ΠΠ°ΡΠ°Π»ΠΎ Π΄ΡΠ³ΠΈ.
SubInt Y; //ΠΠΎΠ½Π΅Ρ Π΄ΡΠ³ΠΈ
int Pay; //Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ Π΄ΡΠ³ΠΈ.
Ref Left; //Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° Π»Π΅Π²ΠΎΠ³ΠΎ ΡΡΠ½Π°.
Ref Right;//Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΡΠ½Π°.
};
typedef struct zveno *svqz;
struct zveno
{
unsigned int Element[256];
svqz Sled;
zveno ();
};
zveno:zveno ()
{
for (int k=0;k<256;Element[k++]=0);
}
class Spisok
{
private:
Ref Root;
void Search (int, int, int, Ref *);
void Poisk (svqz, SubInt, svqz *);
void Postroenie (svqz *);
void Udalenie (svqz *, svqz);
public:
Spisok () { Root = NULL;} //ΠΠ½Π°ΡΠ°Π»Π΅ Π΄Π΅ΡΠ΅Π²ΠΎ ΠΏΡΡΡΠΎ.
void Reshenie ();
void Postr ();
};
void Spisok: Search (int A, int B, int C, Ref *p)
//ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΠΏΠΎΠ»Ρ A, B, C, Π² Π΄Π΅ΡΠ΅Π²ΠΎ *p.
{
if ((*p) == NULL)
{
(*p) = new (Uzel); (**p).X = A; (**p).Y = B; (**p).Pay = C;
(**p).Left = (**p).Right = NULL;
}
else
if (C<=(**p).Pay) Search (A, B, C,&((**p).Left));
else
if (C>(**p).Pay) Search (A, B, C,&((**p).Right));
}
void Spisok: Postroenie (svqz *UkStr)
//ΠΠΎΡΡpΠΎΠ΅Π½ΠΈΠ΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏpΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ°
//Ρ Π·Π°Π³Π»Π°Π²Π½ΡΠΌ Π·Π²Π΅Π½ΠΎΠΌ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π²Π΅ΡΡΠΈΠ½Ρ Π³ΡΠ°ΡΠ°.
{
svqz UkZv;
int el;
(*UkStr) = new (zveno);
UkZv = (*UkStr); UkZv->Sled = NULL;
cout << «Input nodes: n» ;
cin >> el;
while (el≠0)
{
UkZv->Sled = new (zveno); UkZv = UkZv->Sled;
UkZv->Element[el] = 1; UkZv->Sled = NULL;
cin >> el;
}
}
void Spisok: Postr ()
//ΠΠΎΡΡpΠΎΠ΅Π½ΠΈΠ΅ Π΄Π΅pΠ΅Π²Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π³ΠΎ Π²ΡΠ΅ ΡΠ΅Π±ΡΠ° Π³ΡΠ°ΡΠ°.
{
int A, B, C;
cout << «For every nodes input input start and finishn» ;
cout << «node and cost of edge: n» ;
cin >> A >> B >> C;
while (A≠0)
{ Search (A, B, C,&Root);
cin >> A >> B >> C;
}
}
void Spisok: Poisk (svqz st, SubInt MENT, svqz *Res)
{
svqz q;
(*Res) = NULL; q = st->Sled;
while (q ≠ NULL && (*Res) == NULL)
{
if (q->Element[MENT]==1) (*Res) = q;
else q = q->Sled;
}
}
void Spisok: Udalenie (svqz *zv, svqz UkStr)
//Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ½Π°ΠΏpΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° Ρ Π·Π°Π³Π»Π°Π²Π½ΡΠΌ Π·Π²Π΅Π½ΠΎΠΌ
//ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ zv.
{
svqz Z; //" Π‘ΡΠ°pΡΠΉ" ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ.
svqz UkZv1; //" HΠΎΠ²ΡΠΉ" ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ.
if ((*zv)->Sled ≠ NULL) (**zv) = *((**zv).Sled);
else
{ Z = UkStr; UkZv1 = UkStr->Sled;
while (UkZv1 ≠ (*zv))
{ Z = UkZv1; UkZv1 = UkZv1->Sled; }
Z->Sled = NULL; delete UkZv1;
}
}
void Spisok: Reshenie ()
{
svqz UkStr; //Π£ΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΏΠΈΡΠΎΠΊ.
Ref UkUzel; //Π Π°Π±ΠΎΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ·Π΅Π» Π΄Π΅ΡΠ΅Π²Π°.
Ref UkUzel1; //Π Π°Π±ΠΎΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ·Π΅Π» Π΄Π΅ΡΠ΅Π²Π°.
SubInt T1, T2;
svqz Res1, Res2;
//ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² Π²Π΅ΡΡΠΈΠ½ Π³ΡΠ°ΡΠ°.
Postroenie (&UkStr);
cout <<" Edges with minimsl cost: «;
while (UkStr->Sled->Sled ≠ NULL)
{
UkUzel1 = Root; //" ΠΡΡΡΠ°ΡΡΠΈΠΉ" ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ.
UkUzel = Root->Left; //" ΠΠΏΠ΅ΡΠ΅ΠΆΠ°ΡΡΠΈΠΉ" ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ.
if (UkUzel== NULL)
{ //ΠΡΠ±ΠΎΡ Π² Π΄Π΅ΡΠ΅Π²Π΅ ΡΠ΅Π±ΡΠ° Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΈ …
T1 = Root->X; T2 = Root->Y;
//… ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ° ΠΈΠ· Π΄Π΅ΡΠ΅Π²Π°.
Root = Root->Right; delete UkUzel1;
}
else
{ //ΠΡΠ±ΠΎΡ Π² Π΄Π΅ΡΠ΅Π²Π΅ ΡΠ΅Π±ΡΠ° Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ ΠΈ …
while (UkUzel->Left ≠ NULL)
{
UkUzel1 = UkUzel1->Left;
UkUzel = UkUzel->Left;
}
T1 = UkUzel->X; T2 = UkUzel->Y;
//… ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π±ΡΠ° ΠΈΠ· Π΄Π΅ΡΠ΅Π²Π°.
UkUzel1->Left = UkUzel->Right;
delete UkUzel;
}
//ΠΡΠ»ΠΈ v ΠΈ w ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ
//ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°ΠΌ W1 ΠΈ W2 ΠΈΠ· VS …
Res1 = Res2 = NULL;
Poisk (UkStr, T1,&Res1);
Poisk (UkStr, T2,&Res2);
if (Res1≠Res2)
for (int k=0;k<256;k++)
if (Res1->Element[k]==1
}
}
void main ()
{
Spisok Tree;
Tree.Postr ();
Tree.Reshenie ();
}
Π‘ΠΏΠΈΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ
1. ΠΠ΅ΡΠ΅Π΄ΠΎΠ² Π. Π., ΠΡΠΈΠΏΠΎΠ²Π° Π. Π. ΠΡΡΡ Π΄ΠΈΡΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ / ΠΠΠ. Π., 1992.
2. ΠΡΠΈΡΡΠΎΡΠΈΠ΄Π΅Ρ Π. Π’Π΅ΠΎΡΠΈΡ Π³ΡΠ°ΡΠΎΠ². ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄. Π.: ΠΠΈΡ, 1978.
3. Π£ΠΈΠ»ΡΠΎΠ½ Π .
ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π² ΡΠ΅ΠΎΡΠΈΡ Π³ΡΠ°ΡΠΎΠ². Π.: ΠΠΈΡ, 1977.
4. ΠΠ΅ΡΠ·ΡΠΈΡΡ Π. Π’. Π‘ΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ .1974