ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ формирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Если Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ v ΠΈ u ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Ρ€Π΅Π±Ρ€ΠΎΠΌ e, Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΡΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ смСТны ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Π° Ρ€Π΅Π±Ρ€ΠΎ e ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π΅Π±Π΅Ρ€ Π³Ρ€Π°Ρ„Π°, ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ v Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Для ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ количСству входящих Ρ€Π΅Π±Π΅Ρ€ ΠΈ ΠΈΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ количСству исходящих Ρ€Π΅Π±Π΅Ρ€, Π° ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сумму… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ формирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

Аннотация

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ запискС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΎ описаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ формирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ списку окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΡΡ‚ΠΈΠΌ Π³Ρ€Π°Ρ„ΠΎΠΌ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ динамичСского списка Π΄ΡƒΠ³ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ списку окрСстностСй. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° написана Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C++ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Microsoft Visual Studio 2005. Π’Π°ΠΊ ΠΆΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ запискС прСдставлСны Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½ Π°Π½Π°Π»ΠΈΠ· Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‘мкостной слоТности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.

ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΡΠΌΠ΅ΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π³Ρ€Π°Ρ„ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

Аннотация Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

3. Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‘мкостной слоТности

4. Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

5. Бписок ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

6. РСшСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²

7. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

Π“Ρ€Π°Ρ„ΠΎΠΌ называСтся ΠΏΠ°Ρ€Π° (X, U), Π³Π΄Π΅ X — ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ мноТСство Π²Π΅Ρ€ΡˆΠΈΠ½, Π° U — Π½Π°Π±ΠΎΡ€ нСупорядочСнных ΠΈ ΡƒΠΏΠΎΡ€ΡΠ΄ΠΎΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΏΠ°Ρ€ Π²Π΅Ρ€ΡˆΠΈΠ½. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ Π³Ρ€Π°Ρ„ G=(X, U). НСупорядочСнная ΠΏΠ°Ρ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½ называСтся Ρ€Π΅Π±Ρ€ΠΎΠΌ, упорядочСнная — Π΄ΡƒΠ³ΠΎΠΉ. Π“Ρ€Π°Ρ„, содСрТащий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π±Ρ€Π°, называСтся Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΡƒΠ³ΠΈ — ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ, ΠΈΠ»ΠΈ ΠΎΡ€Π³Ρ€Π°Ρ„ΠΎΠΌ.

Если Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ v ΠΈ u ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Ρ‹ Ρ€Π΅Π±Ρ€ΠΎΠΌ e, Ρ‚ΠΎ Π³ΠΎΠ²ΠΎΡ€ΡΡ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ смСТны ΠΌΠ΅ΠΆΠ΄Ρƒ собой, Π° Ρ€Π΅Π±Ρ€ΠΎ e ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π½ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ…. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ€Π΅Π±Π΅Ρ€ Π³Ρ€Π°Ρ„Π°, ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Π½Ρ‹Ρ… Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ v Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Для ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ Π²Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ количСству входящих Ρ€Π΅Π±Π΅Ρ€ ΠΈ ΠΈΡΡ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ количСству исходящих Ρ€Π΅Π±Π΅Ρ€, Π° ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сумму Π΅Π΅ Π²Ρ…одящСй ΠΈ ΠΈΡΡ…одящСй стСпСни. Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ 0, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ.

Для ΠΎΡ€Π³Ρ€Π°Ρ„Π° Π½Π° Ρ€ΠΈΡ. 3 входящиС стСпСни Π²Π΅Ρ€ΡˆΠΈΠ½ 1,2,3,4,5 Ρ€Π°Π²Π½Ρ‹ соотвСтствСнно 0,1,1,1,0, исходящиС — 2,0,0,1,0. Π‘Ρ‚Π΅ΠΏΠ΅Π½ΠΈ Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Π΅ слоТСниСм входящих ΠΈ ΠΈΡΡ…одящих стСпСнСй Ρ€Π°Π²Π½Ρ‹ 2,1,1,2,0. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠ², Π²Π΅Ρ€ΡˆΠΈΠ½Π° 5 — изолированная.

Π Π΅Π±Ρ€ΠΎ, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ саму с ΡΠΎΠ±ΠΎΠΉ, называСтся ΠΏΠ΅Ρ‚Π»Π΅ΠΉ. Если ΠΎΠ΄Π½Ρƒ ΠΏΠ°Ρ€Ρƒ Π²Π΅Ρ€ΡˆΠΈΠ½ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‚ Π΄Π²Π° ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ Ρ€Π΅Π±Π΅Ρ€, Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ€Π΅Π±Ρ€Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ. Π“Ρ€Π°Ρ„ называСтся простым, Ссли ΠΎΠ½ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π½ΠΈ ΠΏΠ΅Ρ‚Π΅Π»ΡŒ, Π½ΠΈ ΠΊΡ€Π°Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π±Π΅Ρ€, ΠΈΠ½Π°Ρ‡Π΅ Π³Ρ€Π°Ρ„ называСтся ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠ³Ρ€Π°Ρ„ΠΎΠΌ. (Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… источниках Π³Ρ€Π°Ρ„ с ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠ³Ρ€Π°Ρ„ΠΎΠΌ, с ΠΏΠ΅Ρ‚лями — псСвдографом). ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ Π³Ρ€Π°Ρ„, любая ΠΏΠ°Ρ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ соСдинСна Ρ€Π΅Π±Ρ€ΠΎΠΌ, называСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ.

Π“Ρ€Π°Ρ„ называСтся Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½Ρ‹ΠΌ, Ссли ΠΎΠ±Ρ‰Π΅Π΅ количСство Ρ€Π΅Π±Π΅Ρ€ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньшС ΠΈΡ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ количСства. Π˜Π½Π°Ρ‡Π΅ Π³Ρ€Π°Ρ„ называСтся ΠΏΠ»ΠΎΡ‚Π½Ρ‹ΠΌ.

2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

ΠžΠ±Ρ‰ΠΈΠ΅ свСдСния ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° формирования ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ списку окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° написана Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования C++ Π² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Microsoft Visual Studio 2005. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ имя «ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. 2 сСмСстр)».

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит ΠΎΠΊΠΎΠ»ΠΎ 560 строк ΠΊΠΎΠ΄Π° ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠΊΠΎΠ»ΠΎ 116 ΠšΠ‘ Π½Π° ΠΆΡ‘стком дискС.

Бтруктурная схСма ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° «ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. 2 сСмСстр» Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ написаниС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ исходного ΠΊΠΎΠ΄Π°. Бтруктурная схСма прСдставлСна Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ΅ 2.1.

Бписок Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

Β· void _input (int &var),

void _input (char &output, char mode = 'b'),

void _input (string &var)

ΠŸΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Π°Ρ функция _input. Π‘Π»ΡƒΠΆΠΈΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° Π½Π΅Π²Π΅Ρ€Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° int, string ΠΈΠ»ΠΈ char, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅.

Β· bool fileExists (string fileName)

Ѐункция провСряСт Ρ„Π°Π»ΠΉ Π½Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΠ΅. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° string пСрСдаётся имя Ρ„Π°ΠΉΠ»Π°. ВозвращаСтся true, Ссли Ρ„Π°ΠΉΠ» сущСствуСт, ΠΈΠ»ΠΈ false, Ссли Ρ„Π°ΠΉΠ» с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.

Β· void main ()

Π’ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

Β· DirectedGraph *assembleGraph (int &NUM_VERTEX, ostream *stream)

Ѐункция, ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‰Π°Ρ динамичСский список ΠΏΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° int, NUM_VERTEX, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅, которая впослСдствии Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ количСство Π²Π΅Ρ€ΡˆΠΈΠ½ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°. Π’Π°ΠΊ ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ *stream Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ….

Β· bool getArcData (string graphName, int &NUM_VERTEX, DirectedGraph *&lastNode, ostream *stream = &cout)

Данная функция ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, содСрТащСго список окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния Π·Π° ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Π·ΠΎΠ². ΠŸΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ graphName Ρ‚ΠΈΠΏΠ° string, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° Π±Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится Π³Ρ€Π°Ρ„, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ NUM_VERTEX Ρ‚ΠΈΠΏΠ° int, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅, ссылку Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ lastNode Ρ‚ΠΈΠΏΠ° DirectedGraph, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ссылку Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ° bool, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅, прСкратился Π»ΠΈ Π²Π²ΠΎΠ΄ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ Π½Π΅Ρ‚.

Β· int findVertexAndPrintNewList (DirectedGraph *firstNode, int NUM_VERTEX, int &maxLevelOfVertex, ostream *stream)

Ѐункция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ» стСпСни всСх Π²Π΅Ρ€ΡˆΠΈΠ½, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ опрСдСляСт ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π³ΠΎ. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт динамичСского списка, количСство Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π°, ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ maxLevelOfVertex, которая ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Ρ‚Π΅Π»Π΅ Π΄Π°Π½Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Β· bool foundInArray (int value, int *arr, int NUM_ITEMS)

Ѐункция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Ρ‚ΠΈΠΏΠ° int ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтов массива. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ истину, Ссли Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΅ΡΡ‚ΡŒ элСмСнт с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΈΠ»ΠΈ лоТь, Ссли Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ элСмСнта Π½Π΅Ρ‚.

Β· fstream openFile (string fileName, char mode)

Ѐункция ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Ρ„Π°ΠΉΠ» для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°: I — Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, o — запись, a — дозапись. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ имя Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ€Π΅ΠΆΠΈΠΌ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса fstream.

Β· void removeNode (DirectedGraph *node, DirectedGraph *&firstNode)

Данная функция удаляСт ΠΈΠ· Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠ³ΠΎ списка ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Π΅ΠΉ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° элСмСнт. Π’Π°ΠΊ ΠΆΠ΅ пСрСдаётся ссылка Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт динамичСского списка.

Β· void removeAdjacentVertex (DirectedGraph *&firstArc, int vertexId, int vertexLevel)

Ѐункция удаляСт ΠΈΠ· Π³Ρ€Π°Ρ„Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, смСТныС с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ пСрСдаётся Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° vertexId). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт динамичСского списка, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹.

Β· void printNeiborhoodsList (DirectedGraph *firstNode, ostream *stream, int NUM_VERTEX, string title = «»)

Ѐункция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ список окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π° Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ». ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт динамичСского списка, Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΊ Π²Ρ‹Π²ΠΎΠ΄Π°, Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — количСство Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π³Ρ€Π°Ρ„Π΅, пятый ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ».

Β· bool **completeAdjacencyMatrix (DirectedGraph *firstNode, int NUM_VERTEX)

Ѐункция создаёт ΠΈ Π·Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ смСТности для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт динамичСского списка ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½ Π² Π³Ρ€Π°Ρ„Π΅. ВозвращаСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив.

Β· void printMatrix (bool **matrix, int dimension, ostream *stream, string title = «»)

функция, выводящая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ». Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°, Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, соотвСтствСнно.

Β· void clearMatrix (bool **matrix, int dimention)

функция ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΎΡ‚Π²Π΅Π΄Ρ‘Π½Π½ΡƒΡŽ ΠΏΠΎΠ΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ matrix с Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ dimention.

Β· int getKeyByValue (int value, int *arr, int numItems)

Ѐункция опрСдСляСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ»ΡŽΡ‡Π° массива, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ value. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поиска, ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈ Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится список окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ: Π½ΠΎΠΌΠ΅Ρ€ строки ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½ΠΎΠΌΠ΅Ρ€ (ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€) Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π°, Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π» записаны ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π²Π΅Ρ€ΡˆΠΈΠ½, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ входят Π΄ΡƒΠ³ΠΈ, исходящиС ΠΈΠ· Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Если Π²Π΅Ρ€ΡˆΠΈΠ½Π° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ исходящих Π΄ΡƒΠ³, Ρ‚ΠΎ Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ стоит 0. На ΠΎΡΠ½ΠΎΠ²Π΅ считанных ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π΄Π°Π½Π½Ρ‹Ρ… строится динамичСский Π΄Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ список, хранящий список Π΄ΡƒΠ³ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°.

На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ выводятся:

Β· имя Π³Ρ€Π°Ρ„Π°;

Β· список окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π·Π°Π΄Π°Π½ Π΄Π°Π½Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„;

Β· стСпСни исхода всСх Π²Π΅Ρ€ΡˆΠΈΠ½ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ исхода;

Β· список окрСстностСй Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π° послС удалСния Π²Π΅Ρ€ΡˆΠΈΠ½, смСТных с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода;

Β· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°.

Алгоритм ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Ѐункция completeAjacencyMatrix.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌΡ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

Β· *firstNode — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡƒΠ·Π΅Π» динамичСского списка;

Β· NUM_VERTEX — количСство Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π°

3. Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈ Ρ‘мкостной слоТности

Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности Для опрСдСлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠ² зависит ΠΎΡ‚ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° Π΄ΡƒΠ³ Π² Π³Ρ€Π°Ρ„Π΅, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΎΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ исхода ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ исхода этой Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹.

ΠŸΡƒΡΡ‚ΡŒ M — количСство Π΄ΡƒΠ³ Π³Ρ€Π°Ρ„Π°, — количСство Π΄ΡƒΠ³ Π³Ρ€Π°Ρ„Π° послС удалСния Π²Π΅Ρ€ΡˆΠΈΠ½, смСТных с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода (Π΄Π°Π»Π΅Π΅ — ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅), N — количСство Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π°, — ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹. Π’ΠΎΠ³Π΄Π° количСство ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ Ρ†ΠΈΠΊΠ»ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅:

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 1

Анализ ёмкостной слоТности Для опрСдСлСния ёмкостной слоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского списка ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности.

Π Π°Π·ΠΌΠ΅Ρ€ динамичСского списка ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ смСТности зависит ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ списка окрСстностСй, Π² Ρ‡Π°ΡΡ‚ности ΠΎΡ‚ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° строк ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° чисСл Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС.

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» динамичСского списка, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ структуру:

struct DirectedGraph {

ArcGraph oneArc;

DirectedGraph *previousArc;

DirectedGraph *nextArc;

};

Π’ ΡΠΎΡΡ‚Π°Π² Π΄Π°Π½Π½ΠΎΠΉ структуры входят: пСрСмСнная-ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ структурного Ρ‚ΠΈΠΏΠ° ArcGraph oneArc, Π΄Π²Π° указатСля Ρ‚ΠΈΠΏΠ° int (ΠΏΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΠ° int отводится Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°). Π’Π°ΠΊ ΠΊΠ°ΠΊ структура ArgGraph состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ oneArc ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 8 Π±Π°ΠΉΡ‚. И ΡΡ‚ΠΎΠ³ΠΎ слСдуСт, Ρ‡Ρ‚ΠΎ данная структура ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 4+4+8 = 16 Π±Π°ΠΉΡ‚.

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ bool, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ 1 Π±Π°ΠΉΡ‚.

Π’Π°ΠΊ ΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ содСрТатся: ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса ostream, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ 80 Π±Π°ΠΉΡ‚, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса fstream, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ 184 Π±Π°ΠΉΡ‚Π°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса string, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ 32 Π±Π°ΠΉΡ‚Π°, ΠΏΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° short, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 2 Π±Π°ΠΉΡ‚Π°, Ρ‚Ρ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° int, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ 4 Π±Π°ΠΉΡ‚Π°, пСрСмСнная Ρ‚ΠΈΠΏΠ° bool, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰Π°Ρ 1 Π±Π°ΠΉΡ‚ ΠΈ ΡΠ΅ΠΌΠ½Π°Π΄Ρ†Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° char, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠΎ 1 Π±Π°ΠΉΡ‚Ρƒ.

ΠŸΡ€ΠΈΠ½ΡΠ² Π·Π° M ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π΄ΡƒΠ³ Π² Π³Ρ€Π°Ρ„Π΅, Π·Π° N ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π²Π΅Ρ€ΡˆΠΈΠ½, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ памяти, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠΉ всСми ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎ Π²Ρ€Π΅ΠΌΡ выполнСния курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Ρ€Π΅ΡˆΠ°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. По ΡΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Π±Ρ‹Π»Π° написана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ:

Β· Π’Π²ΠΎΠ΄ΠΈΡ‚ΡŒ список окрСстностСй ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°;

Β· Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ» список окрСстностСй ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΠΈ исхода всСх Π²Π΅Ρ€ΡˆΠΈΠ½;

Β· ΠΠ°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ с Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΠ΅ΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ исхода;

Β· Π£Π΄Π°Π»ΡΡ‚ΡŒ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹, смСТныС с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода;

Β· Π‘ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ смСТности ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° ΡΠΊΡ€Π°Π½ ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ».

«C/C++ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ высокого уровня» Π’. А. Павловская.

«ΠŸΠΎΠ»Π½Ρ‹ΠΉ справочник ΠΏΠΎ Π‘++, 4-Π΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅» Π“Π΅Ρ€Π±Π΅Ρ€Ρ‚ Π¨ΠΈΠ»Π΄Ρ‚

«Π’Сория Π³Ρ€Π°Ρ„ΠΎΠ²» Π’. Π’. Π‘Π΅Π»ΠΎΠ², Π£. М. Π’ΠΎΡ€ΠΎΠ±ΡŒΡ‘Π².

РСшСниС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 1

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„:

Π“Ρ€Π°Ρ„ послС удалСния:

ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТный Π³Ρ€Π°Ρ„ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности:

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ 1, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ M = 38, 16, N = 17, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 1: 3, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 2: 2, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 3: 4, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 4: 1, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 5: 2, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 6: 2, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 7: 2, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 8: 1, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 9: 2, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 10: 6, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 11: 3, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 12: 2, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 13: 1, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 14: 1, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 15: 1, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 16: 1, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ 17: 4, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

626 ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ Ρ†ΠΈΠΊΠ»Π°ΠΌ.

Анализ ёмкостной слоТности:

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ количСство Π΄ΡƒΠ³ M = 38, количСство Π²Π΅Ρ€ΡˆΠΈΠ½ N = 17. Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассчитаСм Ρ‘ΠΌΠΊΠΎΡΡ‚Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

961 Π±Π°ΠΉΡ‚ памяти.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 2

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„:

Π“Ρ€Π°Ρ„ послС удалСния:

Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности:

Для вычислСния количСства ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ Ρ†ΠΈΠΊΠ»Π°ΠΌ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ 1:

1540 ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎ Ρ†ΠΈΠΊΠ»Π°ΠΌ.

Анализ ёмкостной слоТности:

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ количСство Π΄ΡƒΠ³ M = 65, количСство Π²Π΅Ρ€ΡˆΠΈΠ½ N = 31. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ, рассчитаСм Ρ‘ΠΌΠΊΠΎΡΡ‚Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ:

1407 Π±Π°ΠΉΡ‚ памяти.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 3

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„:

Π“Ρ€Π°Ρ„ послС удалСния:

Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности:

Π’ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π²ΡˆΠΈΡΡŒ Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΎΠΉ 1, рассчитаСм Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° (количСство Π΄ΡƒΠ³ M = 181,, N = 77):

7601 ΠΏΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ Ρ†ΠΈΠΊΠ»Π°ΠΌ.

Анализ ёмкостной слоТности:

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ количСство Π΄ΡƒΠ³ M = 181, количСство Π²Π΅Ρ€ΡˆΠΈΠ½ N = 77. Π˜ΡΡ…ΠΎΠ΄Ρ ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ, вычислим Ρ‘ΠΌΠΊΠΎΡΡ‚Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ 2:

3309 Π±Π°ΠΉΡ‚ памяти.

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

4. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

#include «stdafx.h»

#include

#include

#include

#include

using namespace std;

struct ArcGraph {

int outVertexId;

int inVertexId;

};

struct DirectedGraph {

ArcGraph oneArc;

DirectedGraph *previousArc;

DirectedGraph *nextArc;

};

void _input (int &var) {

int BAD_STATE = 2;

do {

cin.clear ();

cin.sync ();

cin >> var;

} while (cin.rdstate () == BAD_STATE);

}

void _input (char &output, char mode = 'b') {

const char OUTPUT_MODE = 'o', ASK_MODE = 'b', MAIN_MODE = 'm', SOME_ACTIONS_MODE = 's';

bool successfulInput;

do {

cin.sync ();

cin >> output;

if (output == 'e') exit (0);

switch (mode) output == 'd'

} while (!successfulInput);

}

void _input (string &var) {

cin.sync ();

getline (cin, var);

}

bool fileExists (string fileName) {

return (ifstream (fileName) ≠ NULL);

}

void main () {

setlocale (LC_ALL, «Russian»);

system («cls»);

static DirectedGraph *firstArc, *sideNode;

static ostream *out;

static fstream fileForOutput;

static string fileForOutputName;

static short CURRENT_STAGE = 0;

static int vertexWithMaxLevel, maxLevel, NUM_VERTEX = 0;

static bool **adjacencyMatrix, fileOutput;

static char action;

const static short START_EXECUTION = 0, INPUT_DATA = 1, THE_MAIN_PART = 2, SOME_ACTIONS_PERFORMED = 3;

const static char ASK_MODE = 'b', MAIN_MODE = 'm', SOME_ACTIONS_MODE = 's',

YES = 'y', NO = 'n',

ON_THE_SCREEN = 's', INTO_A_FILE = 'f',

FOR_INPUT = 'i', FOR_OUTPUT = 'o', FOR_APPEND = 'a',

PRINT_NEIBORHOODS = 'p', MAKE_ADJACENCY_MATRIX = 'm', DELETE_VERTEX = 'd', RESTART_PROGRAM = 'r', SAVE_NEW_GRAPH = 's', EXIT = 'e';

DirectedGraph *assembleGraph (int &NUM_VERTEX, ostream *stream);

fstream openFile (string fileName, char mode);

int findVertexAndPrintNewList (DirectedGraph *firstNode, int NUM_VERTEX, int &maxLevel, ostream *stream);

bool **completeAdjacencyMatrix (DirectedGraph *firstNode, int NUM_VERTEX);

bool saveGraph (string fileName, DirectedGraph *firstNode, int NUM_VERTEX);

void removeAdjacentVertex (DirectedGraph *&firstArc, int NUM_VERTEX, int vertexId, int vertexLevel);

void removeNode (DirectedGraph *node, DirectedGraph *&firstNode);

void printNeiborhoodsList (DirectedGraph *firstNode, ostream *stream, int NUM_VERTEX, bool saveMode, string title = «»);

void printMatrix (bool **matrix, int dimension, ostream *stream, string title = «»);

void clearMatrix (bool **matrix, int dimention);

switch (CURRENT_STAGE) {

case START_EXECUTION:

cout << «Π Π΅ΠΆΠΈΠΌ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… (f — Π² Ρ„Π°ΠΉΠ», s — Π½Π° ΡΠΊΡ€Π°Π½, e — Π²Ρ‹Ρ…ΠΎΠ΄): «;

_input (action, FOR_OUTPUT);

switch (action) {

case ON_THE_SCREEN:

out = &cout;

fileOutput = false;

break;

case INTO_A_FILE:

cout << «Π˜ΠΌΡ Ρ„Π°ΠΉΠ»Π° для записи (Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π½Π΅ Ρ‚рСбуСтся): «;

_input (fileForOutputName);

if (fileExists («output/» +fileForOutputName+" .txt"))

fileForOutput = openFile («output/» +fileForOutputName+" .txt", FOR_APPEND);

else

fileForOutput = openFile («output/» +fileForOutputName+" .txt", FOR_OUTPUT);

out = &fileForOutput;

fileOutput = true;

break;

}

CURRENT_STAGE = INPUT_DATA;

break;

case INPUT_DATA:

firstArc = assembleGraph (NUM_VERTEX, out);

CURRENT_STAGE = THE_MAIN_PART;

break;

case THE_MAIN_PART:

cout << «Π‘писок доступных дСйствий:» << endl;

cout << PRINT_NEIBORHOODS << «- вывСсти список окрСстностСй» << endl;

cout << MAKE_ADJACENCY_MATRIX << «- ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ смСТности» << endl;

cout << DELETE_VERTEX << «- ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ смСТныС с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода, Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹» << endl;

cout << RESTART_PROGRAM << «- Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сначала» << endl;

cout << EXIT << «- Π²Ρ‹Ρ…ΠΎΠ΄» << endl;

_input (action, MAIN_MODE);

switch (action) {

case PRINT_NEIBORHOODS:

printNeiborhoodsList (firstArc, out, NUM_VERTEX, false, «Π“Ρ€Π°Ρ„ Π·Π°Π΄Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ списком окрСстностСй:»);

*out << endl << endl;

if (fileOutput)

cout << «Π‘писок окрСстностСй исходного Π³Ρ€Π°Ρ„Π° записан Π² Ρ„Π°ΠΉΠ».» << endl;

break;

case MAKE_ADJACENCY_MATRIX:

adjacencyMatrix = completeAdjacencyMatrix (firstArc, NUM_VERTEX);

printMatrix (adjacencyMatrix, NUM_VERTEX, out, «ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности исходного Π³Ρ€Π°Ρ„Π°: «);

clearMatrix (adjacencyMatrix, NUM_VERTEX);

*out << endl << endl;

if (fileOutput)

cout << «ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности исходного Π³Ρ€Π°Ρ„Π° записана Π² Ρ„Π°ΠΉΠ».» << endl;

break;

case DELETE_VERTEX:

vertexWithMaxLevel = findVertexAndPrintNewList (firstArc, NUM_VERTEX, maxLevel, out);

*out << endl;

NUM_VERTEX -= maxLevel;

removeAdjacentVertex (firstArc, NUM_VERTEX, vertexWithMaxLevel, maxLevel);

if (fileOutput)

cout << «Π’Π΅Ρ€ΡˆΠΈΠ½Ρ‹, смСТныС с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода, ΡƒΠ΄Π°Π»Π΅Π½Ρ‹,» << endl

<< «Π‘Ρ‚Π΅ΠΏΠ΅Π½ΠΈ исхода всСх Π²Π΅Ρ€ΡˆΠΈΠ½ записаны Π² Ρ„Π°ΠΉΠ».» << endl;

CURRENT_STAGE = SOME_ACTIONS_PERFORMED;

break;

case RESTART_PROGRAM:

while (firstArc ≠ NULL) {

sideNode = firstArc;

firstArc = firstArc->nextArc;

delete sideNode;

}

if (fileOutput) {

fileForOutput.close ();

*out << endl << endl;

cout << «Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°!» << endl;

}

CURRENT_STAGE = START_EXECUTION;

break;

}

break;

case SOME_ACTIONS_PERFORMED:

cout << «Π‘писок доступных дСйствий:» << endl;

cout << PRINT_NEIBORHOODS << «- вывСсти список окрСстностСй» << endl;

cout << MAKE_ADJACENCY_MATRIX << «- ΡΠΎΡΡ‚Π²ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹Π²Π΅ΡΡ‚ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ смСТности» << endl;

cout << SAVE_NEW_GRAPH << «- ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π³Ρ€Π°Ρ„» << endl;

cout << RESTART_PROGRAM << «- Π½Π°Ρ‡Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ сначала» << endl;

cout << EXIT << «- Π²Ρ‹Ρ…ΠΎΠ΄» << endl;

_input (action, SOME_ACTIONS_MODE);

switch (action) {

case PRINT_NEIBORHOODS:

printNeiborhoodsList (firstArc, out, NUM_VERTEX, false, «Π‘писок окрСстностСй Π³Ρ€Π°Ρ„Π° послС удалСния Π²Π΅Ρ€ΡˆΠΈΠ½, смСТных с Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅ΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΡƒΡŽ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ исхода:»);

*out << endl << endl;

if (fileOutput)

cout << «Π‘писок окрСстностСй Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° записан Π² Ρ„Π°ΠΉΠ».» << endl;

break;

case MAKE_ADJACENCY_MATRIX:

adjacencyMatrix = completeAdjacencyMatrix (firstArc, NUM_VERTEX);

printMatrix (adjacencyMatrix, NUM_VERTEX, out, «ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°: «);

clearMatrix (adjacencyMatrix, NUM_VERTEX);

*out << endl << endl;

if (fileOutput)

cout << «ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° смСТности Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π° записана Π² Ρ„Π°ΠΉΠ».» << endl;

break;

case SAVE_NEW_GRAPH:

cout << «Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Π½ΠΎΠ²ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°: «;

_input (fileForOutputName);

if (!saveGraph (fileForOutputName, firstArc, NUM_VERTEX))

cout << «Π“Ρ€Π°Ρ„ с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ «<< fileForOutputName << «ΡƒΠΆΠ΅ сущСствуСт!» << endl;

else

cout << «Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Ρ„Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.» << endl;

break;

case RESTART_PROGRAM:

while (firstArc ≠ NULL) {

sideNode = firstArc;

firstArc = firstArc->nextArc;

delete sideNode;

}

if (fileOutput) {

fileForOutput.close ();

*out << endl << endl;

cout << «Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ» ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°!» << endl;

}

CURRENT_STAGE = START_EXECUTION;

break;

}

}

system («pause»);

main ();

}

DirectedGraph *assembleGraph (int &NUM_VERTEX, ostream *stream) {

DirectedGraph *firstNode = NULL, *lastNode = NULL, *currentNode;

bool getArcData (string graphName, int &NUM_VERTEX, DirectedGraph *&lastNode, ostream *stream = &cout);

string graphName;

cout << «Π˜ΠΌΡ Π³Ρ€Π°Ρ„Π°: «;

_input (graphName);

if (getArcData (graphName, NUM_VERTEX, firstNode, stream)) {

currentNode = firstNode;

while (getArcData (graphName, NUM_VERTEX, lastNode)) {

lastNode->previousArc = currentNode;

lastNode->nextArc = NULL;

currentNode->nextArc = lastNode;

currentNode = lastNode;

}

}

return firstNode;

}

bool getArcData (string graphName, int &NUM_VERTEX, DirectedGraph *&lastNode, ostream *stream = &cout) {

static fstream fileForReadGraph;

string filePath = «graphs/» ;

int inVertexId;

static int counter = 0;

char sideChar;

static bool firstIn = true;

bool fileExists (string fileName);

fstream openFile (string fileName, char mode);

if (firstIn) {

if (!fileExists (filePath+graphName+" .txt")) {

cout << «Π“Ρ€Π°Ρ„Π° с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚!» << endl << «Π‘ΡƒΠ΄Π΅Ρ‚ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½ стандартный Ρ„Π°ΠΉΠ».. .» << endl;

graphName = «default» ;

}

fileForReadGraph = openFile (filePath+graphName+" .txt", 'i');

*stream << «Π“Ρ€Π°Ρ„ «<< graphName << endl;

firstIn = false;

counter++;

}

if (fileForReadGraph.eof ()) {

firstIn = true;

NUM_VERTEX = counter;

counter = 0;

fileForReadGraph.close ();

return false;

}

lastNode = (DirectedGraph*) new (DirectedGraph);

lastNode->previousArc = NULL;

lastNode->nextArc = NULL;

if (lastNode == NULL) {

cout << «ΠŸΠ°ΠΌΡΡ‚ΡŒ Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΠΈΠ»Π°ΡΡŒ!» << endl << «Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΎ.. .» ;

Sleep (1000);

exit (1);

}

fileForReadGraph >> inVertexId;

lastNode->oneArc.inVertexId = inVertexId;

lastNode->oneArc.outVertexId = counter;

sideChar = fileForReadGraph. get ();

if (sideChar == 'n')

counter++;

return true;

}

int findVertexAndPrintNewList (DirectedGraph *firstNode, int NUM_VERTEX, int &maxLevelOfVertex, ostream *stream) {

int counter, inVertexCounter, vertexWithMaxLevel = 0;

maxLevelOfVertex = 0;

for (counter = 1; counter <= NUM_VERTEX; counter++) {

inVertexCounter = 0;

while ((firstNode ≠ NULL) && (firstNode->oneArc.outVertexId == counter)) {

inVertexCounter++;

firstNode = firstNode->nextArc;

}

*stream << «Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ исхода Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ «<< counter << «: «<< inVertexCounter << endl;

if (inVertexCounter > maxLevelOfVertex) {

maxLevelOfVertex = inVertexCounter;

vertexWithMaxLevel = counter;

}

}

*stream << «Π’Π΅Ρ€ΡˆΠΈΠ½Π° с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒΡŽ исхода: «<< vertexWithMaxLevel << endl;

return vertexWithMaxLevel;

}

int foundInArray (int value, int *arr, int rightBound) {

int counter, middle, leftBound = 0;

if ((value > arr[rightBound]) || (value < arr[leftBound]))

return -1;

counter = 0;

while ((rightBound-leftBound) > 1) {

middle = (rightBound+leftBound)/2;

if (arr[middle] < value)

leftBound = middle;

else

rightBound = middle;

}

for (counter = 0; counter <= rightBound; counter++) {

if (arr[counter] == value)

return counter;

}

return -1;

}

fstream openFile (string fileName, char mode) {

fstream filePointer;

switch (mode) {

case 'i': filePointer. open (fileName, ios_base:in); break;

case 'o': filePointer. open (fileName, ios_base:out); break;

case 'a': filePointer. open (fileName, ios_base:app); break;

}

return filePointer;

}

void removeNode (DirectedGraph *node, DirectedGraph *&firstNode) {

if ((node->previousArc ≠ NULL) && (node->nextArc ≠ NULL)) {

node->previousArc->nextArc = node->nextArc;

node->nextArc->previousArc = node->previousArc;

} else if ((node->previousArc == NULL) && (node->nextArc ≠ NULL)) {

node->nextArc->previousArc = NULL;

firstNode = node->nextArc;

} else if ((node->previousArc ≠ NULL) && (node->nextArc == NULL)) {

node->previousArc->nextArc = NULL;

} else if ((node->previousArc == NULL) && (node->nextArc == NULL)) {

firstNode = NULL;

}

delete node;

}

bool saveGraph (string fileName, DirectedGraph *firstNode, int NUM_VERTEX) {

bool fileExists (string fileName);

void printNeiborhoodsList (DirectedGraph *firstNode, ostream *stream, int NUM_VERTEX, bool saveMode, string title = «»);

fstream openFile (string fileName, char mode);

if (fileExists («graphs/» +fileName+" .txt")) return false;

fstream file;

file = openFile («graphs/» +fileName+" .txt", 'o');

printNeiborhoodsList (firstNode, &file, NUM_VERTEX, true);

return true;

}

void removeAdjacentVertex (DirectedGraph *&firstArc, int NUM_VERTEX, int vertexId, int vertexLevel) {

DirectedGraph *currentNode, *nodePointer, *sidePointer;

int counter, currentId, *adjacentVertex, *newVertexId, NOT_FOUND = -1;

bool noOneBefore;

void removeNode (DirectedGraph *node, DirectedGraph *&firstNode);

int foundInArray (int value, int *arr, int rightBound);

currentNode = firstArc;

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId ≠ vertexId))

currentNode = currentNode->nextArc;

counter = 1;

adjacentVertex = new int [vertexLevel];

adjacentVertex[0] = currentNode->oneArc.inVertexId;

currentNode->oneArc.inVertexId = 0;

currentNode = currentNode->nextArc;

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == vertexId)) {

adjacentVertex[counter] = currentNode->oneArc.inVertexId;

nodePointer = currentNode;

currentNode = currentNode->nextArc;

removeNode (nodePointer, firstArc);

counter++;

}

currentNode = firstArc;

while (currentNode ≠ NULL) {

currentId = currentNode->oneArc.outVertexId;

if (foundInArray (currentId, adjacentVertex, vertexLevel-1) ≠ NOT_FOUND) {

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == currentId)) {

nodePointer = currentNode;

currentNode = currentNode->nextArc;

removeNode (nodePointer, firstArc);

}

continue;

}

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == currentId))

currentNode = currentNode->nextArc;

}

currentNode = firstArc;

newVertexId = new int [NUM_VERTEX];

counter = 0;

while (currentNode ≠ NULL) {

newVertexId[counter] = currentNode->oneArc.outVertexId;

if (currentNode->oneArc.inVertexId ≠ 0) {

noOneBefore = true;

sidePointer = NULL;

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == newVertexId[counter])) {

currentNode->oneArc.outVertexId = counter+1;

if (sidePointer ≠ NULL) {

removeNode (sidePointer, firstArc);

sidePointer = NULL;

}

if (foundInArray (currentNode->oneArc.inVertexId, adjacentVertex, vertexLevel-1) ≠ NOT_FOUND) {

if (noOneBefore) {

currentNode->oneArc.inVertexId = 0;

sidePointer = currentNode;

currentNode = currentNode->nextArc;

} else {

nodePointer = currentNode;

currentNode = currentNode->nextArc;

removeNode (nodePointer, firstArc);

}

continue;

}

if (noOneBefore)

noOneBefore = false;

currentNode = currentNode->nextArc;

}

} else {

currentNode->oneArc.outVertexId = counter+1;

currentNode = currentNode->nextArc;

}

counter++;

}

currentNode = firstArc;

while (currentNode ≠ NULL) {

if (currentNode->oneArc.inVertexId == 0) {

currentNode = currentNode->nextArc;

continue;

}

currentId = currentNode->oneArc.outVertexId;

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == currentId)) {

currentNode->oneArc.inVertexId = foundInArray (currentNode->oneArc.inVertexId, newVertexId, NUM_VERTEX-1)+1;

currentNode = currentNode->nextArc;

}

}

}

void printNeiborhoodsList (DirectedGraph *firstNode, ostream *stream, int NUM_VERTEX, bool saveMode, string title = «») {

DirectedGraph *currentNode = firstNode;

int currentVertex;

if (!title.empty ())

*stream << title;

if (saveMode) {

while (currentNode ≠ NULL) {

currentVertex = currentNode->oneArc.outVertexId;

*stream << endl << currentNode->oneArc.inVertexId;

currentNode = currentNode->nextArc;

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == currentVertex)) {

*stream << ' ' << currentNode->oneArc.inVertexId;

currentNode = currentNode->nextArc;

}

}

} else {

while (currentNode ≠ NULL) {

*stream << endl << (currentVertex = currentNode->oneArc.outVertexId) << «: «;

*stream << currentNode->oneArc.inVertexId;

currentNode = currentNode->nextArc;

while ((currentNode ≠ NULL) && (currentNode->oneArc.outVertexId == currentVertex)) {

*stream << ' ' << currentNode->oneArc.inVertexId;

currentNode = currentNode->nextArc;

}

}

}

}

bool **completeAdjacencyMatrix (DirectedGraph *firstNode, int NUM_VERTEX) {

DirectedGraph *currentNode = firstNode;

int currentId, rowCounter, colCounter;

bool **adjacencyMatrix = new bool* [NUM_VERTEX];

for (rowCounter = 0; rowCounter < NUM_VERTEX; rowCounter++) {

adjacencyMatrix[rowCounter] = new bool [NUM_VERTEX];

for (colCounter = 0; colCounter < NUM_VERTEX; colCounter++)

adjacencyMatrix[rowCounter][colCounter] = false;

}

currentNode = firstNode;

while (currentNode ≠ NULL) {

if (currentNode->oneArc.inVertexId ≠ 0)

adjacencyMatrix[currentNode->oneArc.outVertexId-1][currentNode->oneArc.inVertexId-1] = true;

currentNode = currentNode->nextArc;

}

return adjacencyMatrix;

}

void printMatrix (bool **matrix, int dimension, ostream *stream, string title = «») {

int rowCounter, colCounter;

if (!title.empty ())

*stream << title;

for (rowCounter = 0; rowCounter < dimension; rowCounter++) {

*stream << endl << ' ' << matrix[rowCounter][0];

for (colCounter = 1; colCounter < dimension; colCounter++) {

*stream << ' ' << matrix[rowCounter][colCounter];

}

}

}

void clearMatrix (bool **matrix, int dimention) {

for (int counter = 0; counter < dimention; counter++)

delete [] matrix[counter];

delete [] matrix;

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ