Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Hasonló dokumentumok
Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

Neumann János Tehetséggondozó Program Gráfalgoritmusok I.


Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

ü É ö É É ö ö ö ü ö ö Á ű ö ű ű ű Á Í ö ö Ó ö

Í Ó ü ü í ü ü ü í Í í É í í Í Í ü ü ü í Í ü

É Í Á Á É Ü Ó É É É É Í Ó Ó Ő Á Á É Á É É É É Á É É Á Á É É Á É Í

Ü

ö ő ő ü ü Ó ü ö ű Á ő ő ö ő Á Ó ű ö ü ő ő ű

ú Ü Í ú ú ú ú ú ú

ó É ó í ó ó í í ö í ó í ö ö ö ü ö ó ó ó ü ú ö ü ó ó ö ö ü ü ü ö ö ó ö í ó ű Ü ó í ú í ö í ö í Í ó ó í í ö ü ö ö í ö í ö ö ö ü ó í ö ö ó í ú ü ó ö

Í Í Í Ü Ó Ó Ö Á Ü Ü Ó Ü Ü Ó Ö Í É Ö

í Ó ó ó í ó ó ó ő í ó ó ó ó

í í É í ó ó É ö í ó í ó í ó ó í ó í í ó ó ó í ö ö ö ö í í í ó ó ö ó

Í Ú É ő ő ú ö Ö ú ú ú ö ö ú ö ö ű ö ő ö ö ú ö ő ő ö ö ö ő ő ú ő ú ö ö ö ú ö ö ú ő ö ú ö ű ö ő Ó ő Á ö ő ö ö

í ó ő í é ö ő é í ó é é ó é í é é í é í íí é é é í é ö é ő é ó ő ő é ö é Ö ü é ó ö ü ö ö é é é ő í ő í ő ö é ő ú é ö é é é í é é í é é ü é é ö é ó í é

é ö é Ö é é ő í ó í é ő ö ú é ó é ő ü ü é ó ö é é ó é é ö é ő í é é ő é é ö é ű ö é í ó é é í ö í ó í ó é é ö ó í ó ó í ó é é ö ő í ó ó í ó ü é í ü

ő ö ő ű ó ö ó ű Í Ö Ö Á Í Ó Ö Ü É Ö Ö Ö Á Á Ö É Á Ö

Ö Ö ú

Ö Ö Ú Ó Ö ű Ő Ő ű ű Ü Ő Ó Ő

ű ú Í Ó Á ú Ű ű Ő Ö Á ú Ű Ü ú ú Á ú ű

Ö Ö Ö Ö Ö Á Ű É Ö Ö Ö


É Í ü ú É ü ő ő ő ő ú ő ú ü ü ő ü ú ü ű ú ú ü ü Í ü ű ő ő É ő

ű í ú ü ü ü ü ü Ó í ü í í í É Á

ő ő ő ő ő ő ú ő ü Á ü ü ő ő ő ő ő ő ő ő ő ő Ö Ó ő ő ő Ö ő ő ő

ú ű ú ú ű ú ű ű ú ű ú ű Á ű ű Á ű ű ú ú ú ú ú ú ű ú ú ú ú ú ú ú ú

Í ö ö ű ú ö ö Í ö ü ö ü

É ö Ű ő ű ő ő ű ű

ú ú ü ü Á ú ú ü ű ű ú ü ü ü ü

Í Í Ó ű Ü Ó Ó Ü ü Ö Í Ü Í Í ú Ö Ó Í ú ú Ö Ó É Í ű ú

ü ö ú ö ú ü ö ü Á Ó ö ö ö ö ú ü ú ü ü ú ú ö ö ü ü ú ü ü ö ö ű ö ü ü ü ü ö ö

ú ü ü ú Ö ú ü ü ü ü ü ú ü ú ü ű Í ü ü ű ü ű Ó ü Ü ű ú ú Á ü ű ű ü ü Ö ü ű ü Í ü ü

ö ö ö ö ö ö ö ü ö ü ö ű ö ú ü ű ö ü Í ö ú ü ü ű ö ú ü Á ü

Ü ű ö Á Ü ü ö ö

ö ö Ö ó ó ö ó ó ó ü ö í ü ú ó ó í ö ö ö ó ö ü ú ó ü ö ü ö ö Ö ü ö ö Ö ó

ö ö ó ú ö ö ú ü ó ö ö Í ö ö ö ü ó ö ö ú ú ö ü ó ü ó ü ö ú ü ó ü ö ó Á Á ö ü ú ó ö ü ü ö ó ü ü Á ü ö ü ö ü ö ö ö ü ö ú ö ö ö ü ú ö ú ö ű ú ú ü ö ó ö ö

É ő ő ű ú Á ő Á ő ű ő ő ő ő ő ő ő ő ű ú ű ű ő ő ő ű

é ú é é é é é é é é é é é é ú é ö é é é ö Ő é é é ú é é é é é é é é ö é é é ö é Ö é é ö é ö é é é ű é ö ö é ö é é ö ö é é ö ö é ö é Ö é ú é é é é é é

ő ö ő ú ő ö ö ő ó ő ö ü ú ö ö ó ő ö ü ó ó ó ó ő ő ő ó ó ú ő ü ő ö ö ó ü ö ö ő ű ö ö ő ú ú ó ö ő ű ö ó

ű ú ú Ö ó Ö ó ó ó Ö ű ó ű ű ü Á ó ó ó ó ü ó ü Ö ó ó ó Ö ű ű ü Ö ű Á ú ú ú ó ű í í Ő ú Á É Ö í ó ü ű í ó ű ó Ö ú Ő ú ó í ú ó

ö ü ü ú ó í ó ü ú ö ó ű ö ó ö í ó ö í ö ű ö ó Ú ú ö ü É ó í ö Ó Á í ó í í Ú ö ú ö ű ü ó

ő ő ő ő ú É ü ú ú ű ú ű ő ő ő ő Á Á ü ő É É É É É É Á Ú Á Á ő ő ő ő ő É Á Á Á ő ő ő Á ü ő ő ü

ö Ó ű ö ó í ó ü ö Ó ó í ö ö ó Ö ó ö í ó í ó Á í ó Á Á Ő ú ü ó Í ü ú ü

ú ű ű É ü ű ü ű ű í ü í ő í Ü ő ő ü ú Í ő ő í ú ü ü ő ü

ó ú ú ü ú ő ó ő ő ó ó ó ö ó ü ő ó ő ö ü ü ó ö ő É ó ö ö ö ó ó ö ü ü ö ü ó ó ő ó ü ó ü ü ö ö É ú ó ó ö ú ö ü ü ó ó ó ü Á ö ö ü ó ö ó ö ö ö ö ó ó ö ó ó

ő ő Ű ü ú ú Ú ü ű ő ő ő ő Á Á Í ü É ő ő ő ő ő É ő ú ú ú ő Á Ö ő

Ü ü Ü Ö Ó ö ü ö Ó Ú Ó ü Ó ö ö Á ö ö ö ö ü

ú ú ö ö ü ü ü ü ű ü ü

ű Á ü ő ö í ö ö ő ő ő ő ö

Ö Ö ű ű ű Ú Ú ű ű ű Ú ű

í ó í ó ó ó í í ü ú í ú ó ó ü ü í ó ü ú ó ü í í ü ü ü ó í ü í ü ü í ü ü í ó ó ó í ó í ü ó í Á

í í ü í í í í í Ó ő ő í í í Ú ü Ú í í Ú ő ü Ú ü ő

ü ö ö ő ü ó ó ú ó

ü ő ő ü ü ő ő ű í í ű ő ő ő ü ő ő í í ő ő ő ő ő ő ü ü í ő Ö ő ü í ő ü í í ő ü ő í ő ő í í ő ü ü í ő ü í ő í ő í ő ü í ő í ü í í ő

Ö ő ü Ö Ö Ő ü ő Ö Ö ü ű Á Í Ö ű ü ő ő ő Ö ü ü ő ő ő Ü ü ő ő ő ü ő ő ü ü

í í í í ó í ó ö ö í ű ü ó ó ü ú Á Á ó ó ó ó ó ó í ó ö ö ü Ó ö ü í ö ó ö í í ö í ó ó í ö í ú ó ú í ö ú ö ö ö í ó ó ó ú ó ü ó ö í ó ó í í í Á í ó ó ó

í ü í ü ő ő ü Í ő ő ő ú í ő ő ö ö ö ű ü í ő ő í ú ö ö ú ő ő ú í ő í ő ö ö í ő ü ü í ő ö ü ü ú í í ü ő í ü Í í í í ö ő ö ü ő í ő ő ü ű ő ő í ő í í ő ő

ö ö ö Ö ö ú Ö í Ö ű ö í Ö í ö ü ö í ú Ö Ö ö í ű ö ö í ö ö Ő ö í ü ö ö í Ö ö ö í ö í Ő í ű ű í Ö Ó í ö ö ö ö Ö Ö ö í ü ö ö Ö í ü Ö ö í ö ö ö ö ö Ö ö í

Ö Ö ö Ó Ó Ó Ó Ü ú ü Ű Ö Ö Ö ö Ü ö Í ü ű

É Ö Á Í Á Ó Ö ü

ű ú ü ü ü Í ü ö ü ö ü ö ü Ó ü ö ü ö ö ü ű ű ú ü ö ö ü Ó ö ű ü ö ú ö ö ü ü ű ü ü ö ö ü ü ú ö ö ü ü ú ü

ű ö ú ö ö ö ö í ű ö ö ö ű ö ö ö í ü ú í ű í ö í ú ű í ü ö ö ú ö í ö ű ú ü ö ö í ö ü ö ú ű ö ö ö í Á í ü í ö ü ö í ü ö Ő ü ö í ű ü ö í í í í í

ó ö í í ü Ű Ö ó ó ű ö ü Í í í ö Ö Ó ö Ű Ö ú ó ó í í ű ö ö ö ö í ó ö ö í ö ű ö ű ö ö ö ö ö í ó Ö Ö ü ú ö ó ü ö Ö ű ö Ö ü ó ö ö ó ö ö Ó í ű ö ű ö ö ű í

ű ú ó ó ü í Á Á ú ó ó ó ó ó ó ó ó ó ó ó ó ó ó í ó ü É ű ü ó í ü í í í í í ó í ü í í ó ó Á

É ú É ö ö ű ö ö ö ú ú ú ű ű ú ö ű ö ű ű ü ö ö ü ű ö ü ö ö ö ö ú ü ö ö ö ú ö ö ú ö ö ú ü ú ú ú ű ü ö ö ű ú ű ű ü ö ű ö ö ö ű ú ö ö ü ú ü ö ö ö ü ú ö ű

ő ű í ő ú í í Á ű í ő ő ő ő í É í í ő Ö Ö Ö Á Í Á ő ő ő ő É ő ő ú ú ú í ő Á Ö ő ő

Gráfalgoritmusok: összefüggőség, párosítás páros gráfban

í ű í í í ű ö ü ü ö ú ű ú ö ö í í í ű ö ü ü ö ö ö ö í í í ű ö ü ü ö ü ö í í í ű í ö í ö ö ű í ü ü ö í ö ö ö ü í í ű í ú ö ö ö ü ö ö ú ö ö ö ü ö ö ö ö

Í Á ő é é é é é ő é ő é ő é Í Á Ú Á Á é ő é ő é é é é é ű é é é é é é é é Á é é é é é ú ú é é é é é é é ú é é é é é é é é é é é ő é é é é é é é é ű é

ú ü ú ö ú í ü í ű ö ü ü ú ú ö ú ö íö í ú ü

Ú ú ö é ö é Ú ú ö ű ö ö ű ö é ö ö é í í Ö ö í í Á Á Ó é ű ü é é ü ú é ü é ű ü é

Á Ó É É Ú É ő í ő ő ö ő ö ő í ö ö ü í ő í ő ö ű ő í ü ü ő í ö ő ü ő ú ü í í ű ü ő ő ő í ö í ú ö ő ö ü ő ő ő É

Á ú ú ű ű ú ú Í ú ú Ö ű Ö ű Ö Ö ű ű ú ÍÍ Í ú Í Í Í Í Í ú ú

ó ú ó ó ó ó ó ó ó ó ó ó ü ó ü ö ü ó Á Á Ő ű ü ó ó ó Í ó ü ú ü Á Á ű ö ó ó ó ó ö ü

Á ó ó ö ó ó ó ö ó ó ö ü ö ó ü ö ó ü ó ö ó ü ó űö ú ü ö ú ó ó ó ő ü ö ö ó ö ó ó ó ó ö ó ő ú ü ö ó ö Ú ü ó ü ő ö ü ö ö ó ó ü ő ő ó ő ü ó ó ó ö ű ő ő ű ü

ö ű é é é é é é ü é é é é ű é é ü é é é é é ó ó é Í é í é é é é ó ö é ö ö ö ó é é í é é é é Ő é é é ü ü é é é ö ö ö é ü é é í é ó ü é é ü é ó é ó ó é

ü ű ü ó ő ó ű ú ő ó ő ű ü ó ő ó ő í ő ó ó ő ő í ó ő ő ü ó ű ü ó ő ő Ö ő ü íí ő í ű ü ó ő ü ő í ő ű ü ó ő ő

í ü ü ú í ü ú ú É Á í ű Á ú í ü í Ő Ű í Ó ű í ü í ű Ú ú É í ü í í

ő ő ó é ő ő ő é ú é ő é é ú ó é é é í é í í é ű é ö é é é Ö ó í é é é ő ő é ö ó é Í ö ö ő é é é ő ó ó ú ö ó í ó ő ő é é ő ü ö é é é Ö é í í é ú ü é ö

Á Á Á ö ö Á É É ö ú É Á É É ű ö ö ö Á É É É ö Á Í Á É ö ö ö Ö Ö ű ö Ö ű Ó ü ö ű ö Ó Ó ú ö ö Á É É ö ű É Á É É ö

íő ö Ú ö ö ő í ű í ű í í ű ö í ö Ü ö

ö í Á Á Á ö É É í É Á Á Á Á Á É ő ö í ő ö ő ö í ü ő ö ő ö ő ü ö ő ö í ő ő ő ö í ő ő ú ö ű ö ő ö í

Á ó ö í í ö í ö ö ó í ű ó í

ó ú ő ö ö ó ó ó ó ó ő ő ö ú ö ő ú ó ú ó ö ö ő ő ö ö ó ú ő ő ö ó ő ö ö ö ö ö ö ó Á É ű ó ő ő ű ó ó ö ö ő ó ó ú ő Ű ö ö ó ó ö ő ö ö ö ö ő Ú ú ó ű ó ó ő

ó í ú ő ó ó ü ő í ú ó ü Ö Í ö ő ü ö ö ó ő ü Ü ö Ö ö ü ó ü ú ö Ö í í ő ö ü ú ü ü ó í ő ő ü í ü É ő ő Í ö ö ó ő ó ó ő ü ö ü ő ó ő ő ö Ö ő ü ő ő ő ü ö ö

é ú ó é í é é é é í é ő é é ő é é í é é é ó é í ó ö é ő ő ő é í ó Í ő í é ö ő é í ó é é ű ó é Ú é í é é í é í é ó é í é ö é ő é ó ó ó é ö é Ö ü é ő ö

ó Ó ó Ó Ő ó Ő Ó Í

Ó ö ü í ü ö ü ü ü ö ü ö ö í ü ü ü ü ö ö í ö ü ö É ü ü ü É ö ü ö ö ü ü ö ü í ü ö í

É ö É ó Á É ó ü Á Ő Ö ü ö Ö ő ü ö ő Ü ű ő ó ő ó ő ő ő í ö ö ö í ő ü ü ő ü ü ő ö ó ő ő ú ő ő ö ö ő ő ő ú ő ő ü ú

ü í ű í ó ö ó ü ö ú ó í Á ó ö ú ü ó í ö ó ó ó Á ó ö ú ó ó ó íú ü ó ö ö í ü ó ö ú ó í í í í Ö í ö ú ó í í ú í ü ű ö Í í ó Ö Ö ö ű ö í ó í Í í ü í

É É Í ú ú Ü ú ú ű

Ó é Ó ü é é é é é é ú é é é é é é Ó é é é é é é Í é é é é é é é é Ó é é é é é é é Ó é ü é é é é é é é é é Ó é é é é ú é é é é é é é é é é é ü é é é é

ő ő ó ő ö ú ű ő ó í ő í ő ó ő í ó ó ő í ő í Ü ú ó ő ö ő É ő ő ő Ü í ó í Ü í ó ó Ü Ü ó ő ó ó Ü Ü ó ó ó í ó Ü ű í Ü Ü ő Ü ó É ó ő í ú

ö Ö Í ó ö ü ö ö ó ó ü ó Í ö ö ö ó Á ü ü

ü ü ó í ö Ö ü ó ö ö Ö ü ö Ö ö ö ö ö ú ö Ó ö ú ö í ö í ö ü ú ü ó í ú ü ó í ö ö ú ó ó ö ü ó ü ö ö ö

Ó Í Ó Í ü ü Ö ú ú ü ü ü Ü ü ü ÍÜ ü ü ü ü ü Í ü ü ü Í ü ü ü ü ü ü ú ü ü ü Í ü

ö ő í ő ü ö ö í ö ö ö ű ő ö í ü í ö ű í ő ö ö ú ö í ö ö í ö ú ö ő í ö ő Á ű ö

ó ő ő ó ü ó ő ő ő ő ő ő ő

ö ö ö ü ö ü ű ö Ö ü ü ü ü ú ö ú ö ö ű Á ö ú ü ü ö ü ö

Átírás:

Algoritmizálás Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar horvath@inf.u-szeged.hu 7. Gráfalgoritmusok II. 7.1. Feladat: Útcaseprő A város utcáinak takarítását úgy szervezték meg, hogy minden éjszaka egy utcaseprő géppel végig kell menni minden utcán, mindkét irányban pontosan egyszer. Készítsünk programot (SEPRO.PAS, SEPRO.C, ), amely megad egy útvonalat, amelyen az utcaseprő gép haladva minden utcában mindkét irányban pontosan egyszer halad végig és visszaér a kiindulási helyére! Bemenet A SEPRO.BE szöveges állomány első sorában a kereszteződések N száma (1 < N 10000), és az utcák M(1 M 300000) száma van. Az útkereszteződéseket az 1,..., N számokkal azonosítjuk. A következő M sor mindegyike két különböző egész számot tartalmaz, két útkereszteződés sorszámát, u és v, ami azt jelenti, hogy a u és v útkereszteződés között utca van. (1 u, v N). Bármely két kereszteződés között legfeljebb egy utca van. A város úthálózata olyan, hogy bármely kereszteződésből bármely másikba el lehet jutni. Kimenet A SEPRO.KI szöveges állomány egyetlen sorába olyan útvonalat kell írni, amely az 1. kereszteződésnél indul és minden utcában mindkét irányban pontosan egyszer halad végig, és visszaér az 1. kereszteződésbe! Több megoldás esetén bármelyik megadható. Példa bemenet és kimenet sepro.be 5 7 1 2 1 3 2 3 2 5 3 5 2 4 4 5 sepro.ki 1 3 5 4 2 5 2 3 2 1 2 4 5 3 1 Megoldás Az úthálózat irányítatlan gráf. Vegyünk egy 1. gyökerű mélységi feszítőfát. Ekkor a gráf minden éle vagy faél, vagy visszaél lesz. Járjuk be a feszítőfát a faélek mentén, továbbá, ha a mélységi bejárás során kiderül, hogy p q visszaél, akkor menjünk el q-ba, majd vissza p-be. 1 program Utcasepro ; 2 c o n s t 3 MaxN=10000; 4 MaxM=100000; 1

5 type 6 Lanc=^ C e l l a ; 7 C e l l a =record pont : i n t e g e r ; c s a t : Lanc end ; 8 P a l e t t a =( Feher, Szurke, Fekete ) ; 9 var 10 n,m: l o n g i n t ; 11 G: array [ 1.. MaxN] of Lanc ; 12 Szin : array [ 1.. MaxN] of P a l e t t a ; 13 Apa : array [ 1.. MaxN] of i n t e g e r ; 14 KiF : Text ; 15 var 16 i : l o n g i n t ; 17 procedure Beolvas ; 18 var 19 BeF : Text ; 20 x, y : i n t e g e r ; 21 p : lanc ; 22 begin 23 a s s i g n ( BeF, sepro. be ) ; r e s e t ( BeF ) ; 24 readln ( BeF, n,m) ; 25 f o r i :=1 to n do G[ i ] : = n i l ; 26 f o r i :=1 to m do begin 27 read ( BeF, x, y ) ; 28 new ( p ) ; 29 p ^. pont := y ; 30 p ^. c s a t :=G[ x ] ; 31 G[ x ] : = p ; 32 new ( p ) ; 33 p ^. pont := x ; 34 p ^. c s a t :=G[ y ] ; 35 G[ y ] : = p ; 36 end ; 37 c l o s e ( BeF ) ; 38 end ; 39 procedure MelyBejar ( p : i n t e g e r ) ; 40 var lp : Lanc ; 41 q : i n t e g e r ; 42 begin 43 Szin [ p ] : = Szurke ; 44 lp :=G[ p ] ; 45 while lp <> n i l do begin 46 q:= lp ^. pont ; 47 i f ( Szin [ q]= Feher ) then begin 48 Apa [ q ] : = p ; 49 w r i t e ( KiF, q, ) ; 50 MelyBejar ( q ) ; 51 w r i t e ( KiF, p, ) ; 52 end e l s e i f ( Szin [ q]= Szurke ) and ( Apa [ p]<>q ) then begin 53 w r i t e ( KiF, q,, p, ) ; 54 end ; 55 lp := lp ^. c s a t ; 56 end ; 57 Szin [ p ] : = Fekete ; 58 end ; 59 begin { prog } 2

60 Beolvas ; 61 f o r i :=1 to n do begin 62 Apa [ i ] : = 0 ; 63 Szin [ i ] : = Feher ; 64 end ; 65 Apa[1]:= 1; 66 a s s i g n ( KiF, sepro. ki ) ; r e w r i t e ( KiF ) ; 67 w r i t e ( KiF, 1, ) ; 68 MelyBejar ( 1 ) ; 69 writeln ( KiF ) ; 70 c l o s e ( KiF ) ; 71 end. 7.2. Euler-út, Euler-köt 7.1. definíció. A G = (V, E) (irányított vagy irányítatlan) gráfban Euler-séta olyan séta, amely a gráf minden élét pontosan egyszer tartalmazza. 7.2. definíció. A G = (V, E) (irányított vagy irányítatlan) gráfban Euler-kör olyan séta, amely a gráf minden élét pontosan egyszer tartalmazza, beleértve a séta utolsó pontjából az első pontba vezető élet is. 7.3. tétel. A G = (V,E) irányított gráfban akkor és csak akkor van Euler-kör, ha G erősen összefüggő, és ( v V )(KiFok(v) = BeFok(v)) (1) 7.4. tétel. A G = (V,E) irányított gráfban akkor és csak akkor van Euler-séta, ha van benne Euler-kör, vagy pontosan egy olyan a V és b V pont van, hogy és G bármely pontja elérhető a-ból. KiFok(a) = BeFok(a) + 1 (2) KiFok(b) + 1 = BeFok(b) (3) ( v V )(v a v b KiFok(v) = BeFok(v)) (4) 7.5. tétel. A G = (V,E) irányítatlan gráfban akkor és csak akkor van Euler-kör, ha összefüggő, és ( v V )(Fok(v) páros) (5) 7.6. tétel. A G = (V, E) irányított gráfban akkor és csak akkor van Euler-séta, ha van benne Euler-kör, vagy összefüggő és pontosan egy olyan a V és b V,a b pont van, hogy Fok(a) páratlan (6) Fok(b) páratlan (7) ( v V )(v a v b Fok(v) páros) (8) 1 Program EulerUt ; { Euler út k e r e s é s i r á n y í t o t t g ráfra } 2 Const 3 MaxP=10000; { a pontok max. száma } 4 MaxM=100000; { az é l e k max. száma } 5 Null =0; 6 Type 7 PontTip = 0.. MaxP; 8 C e l l a =Record 9 Pont : PontTip ; 10 c s a t : 0..MaxM; 11 End ; 12 Graf=Array [ 1.. MaxP] Of 0..MaxM; { a g r á f á b r á z o l á s t í p u s a } 13 U t t i p =array [ 0..MaxM] of 0.. MaxP; 3

14 Var 15 N, { a pontok száma } 16 E: Longint ; { az é l e k száma } 17 G: Graf ; 18 El : Array [ 1.. MaxP] of C e l l a ; { az e l s ő a k t í v é l : p >q=el [G[ p ] ]. pont } 19 Szabad : l o n g i n t ; { az e l s ő szabad c e l l a } 20 Ut : UtTip ; { a s é t a p o n t j a i } 21 KiFok, BeFok : Array [ 1.. MaxP] of l o n g i n t ; 22 Procedure Beolvas ; Var BeF : Text ; 23 u, v : PontTip ; 24 i : Longint ; 25 Guv: l o n g i n t ; 26 Begin 27 Assign ( BeF, e u l e r k o r. be ) ; Reset ( BeF ) ; 28 ReadLn ( BeF, N, E ) ; 29 For u:=1 To N Do Begin { I n i c i a l i z á l á s } 30 G[ u ] : = Null ; 31 KiFok [ u ] : = 0 ; 32 BeFok [ u ] : = 0 ; 33 End ; 34 For i :=1 To E Do Begin { az input b e o l v a s á s a } 35 ReadLn ( BeF, u, v ) ; 36 Guv:= szabad ; i n c ( szabad ) ; 37 El [ Guv ]. pont := v ; 38 El [ Guv ]. c s a t :=G[ u ] ; 39 G[ u ] : = Guv; 40 Inc ( KiFok [ u ] ) ; 41 Inc ( BeFok [ v ] ) ; 42 End{ f o r i } ; 43 44 Close ( BeF ) ; 45 End{ Beolvas } ; 46 Procedure KiIr ; Var 47 KiF : Text ; 48 i : l o n g i n t ; 49 Begin 50 Assign ( KiF, e u l e r k o r. ki ) ; Rewrite ( KiF ) ; 51 f o r i :=1 to E do 52 w r i t e ( KiF, Ut [ i ], ) ; 53 Writeln ( kif ) ; 54 Close ( KiF ) ; 55 End{ KiIr } ; 56 Procedure VeremBe ( p : word ) ; 57 begin end ; 58 Procedure Torol ; begin end ; 59 f u n c t i o n T e t e j e : word ; 60 begin end ; 61 f u n c t i o n NemUres : boolean ; 62 begin end ; 63 Procedure L e t e s i t ( v : l o n g i n t ) ; 64 begin end ; 65 procedure EulerUt ( 66 var G: graf ; / / a gráf 67 n : word ; m: l o n g i n t ; / / a pontok és é l e k száma 4

68 a : PontTip ; / / van a ból induló Euler út 69 var Ut : UtTip ) ; / / az út 70 var p : PontTip ; 71 k : word ; 72 begin 73 L e t e s i t (m) ; { verem l é t e s í t é s } 74 VeremBe ( a ) ; 75 k:=m; 76 while NemUres do begin { amíg a verem nem üres } 77 p:= T e t e j e ; 78 i f G[ p]= Null then begin { n i n c s már p ből benemjárt é l } 79 Torol ; {p t t ö r ö l j ü k a veremből } 80 Ut [ k ] : = p ; 81 dec ( k ) ; 82 end e l s e begin { tovább a p >q é l e n } 83 VeremBe ( El [G[ p ] ]. pont ) ; 84 G[ p ] : = El [G[ p ] ]. c s a t ; 85 end ; 86 end { while } ; 87 end { EulerUt } ; 88 begin { Program } 89 Beolvas ; 90 EulerUt (G, n, E, Ut ) ; 91 KiIr ; 92 end. Euler-kör keresés irányítatlan gráfra 1 Program EulerKor ; { Euler út ( kör ) k e r e s é s i r á n y í t a t l a n g ráfra } 2 Const 3 MaxP=10000; { a pontok max. száma } 4 MaxM=100000; { az é l e k max. száma } 5 Null =0; 6 Type 7 PontTip = 0.. MaxP; 8 C e l l a =Record 9 Pont : PontTip ; 10 masik : l o n g i n t ; 11 a k t i v : boolean ; 12 c s a t : 0..MaxM; 13 End ; 14 Graf=Array [ 1.. MaxP] Of 0..MaxM; { a g r á f á b r á z o l á s t í p u s a } 15 U t t i p =array [ 0..MaxM] of 0.. MaxP; 16 Var 17 N, E: Longint ; { a pontok száma, az é l e k száma } 18 G: Graf ; 19 El : Array [ 1.. MaxP] of C e l l a ; { az e l s ő a k t í v é l : p >q=el [G[ p ] ]. pont } 20 Szabad : l o n g i n t ; { az e l s ő szabad c e l l a } 21 Ut : UtTip ; { a s é t a p o n t j a i } 22 Fok : Array [ 1.. MaxP] of l o n g i n t ; 23 a : PontTip ; 24 Procedure Beolvas ; Var BeF : Text ; 25 u, v : PontTip ; 26 i, Guv, Gvu: l o n g i n t ; 27 Begin 28 Assign ( BeF, e u l e r k o r. be ) ; Reset ( BeF ) ; 29 ReadLn ( BeF, N, E ) ; 5