Ðîññèéñêî-Àðìÿíñêèé (Ñëàâÿíñêèé) ãîñóäàðñòâåííûé Óíèâåðñèòåò
Ôàêóëüòåò ïðèêëàäíîé ìàòåìàòèêè è èíôîðìàòèêè
Êóðñîâàÿ ðàáîòà
Òåìà:Íàõîæäåíèå ýéëåðîâà öèêëà â ãðàôå.
Êàôåäðà:Ñèñòåìíîå
ïðîãðàììèðîâàíèå.
Èñïîëíèòåëü:
ñòóäåíòêà III
êóðñà
Ãåâîðãÿí Ê.Ã.
Ðóêîâîäèòåëü: Åãèàçàðÿí Â.Ñ.
Åðåâàí 2003ã.
Ñîäåðæàíèå.
Îñíîâíûå ïîíÿòèÿ………………………………………………………3
Ïîèñê
â øèðèíó…………………………………………………………5
Ïîèñê
â ãëóáèíó…………………………………………………………8
Ýéëåðîâ
öèêë……………………………………………………………11
Ëèòåðàòóðà................................................................................................16
Îñíîâíèå ïîíÿòèÿ.
Îðèåíòèðîâàííûé ãðàô (directed graph) îïðåäåëÿåòñÿ êàê ïàðà (V,E), ãäå V-êîíå÷íîå ìíîæåñòâî
, à E-áèíàðíîå
îòíîøåíèå íà V, ò.å.ïîäìíîæåñòâî ìíîæåñòâà V´V. Îðèåíòèðîâàííûé ãðàô èíîãäà äëÿ êðàòêîñòè íàçûâàþò
îðãðàôîì (digraph).Ìíîæåñòâî V
íàçûâàþò ìíîæåñòâîì âåðøèí ãðàôà (vartex set);åãî ýëåìåíò íàçûâàþò âåðøèíîé ãðàôà(vartex) .Ìíîæåñòâî E íàçûâàÿò
ìíîæåñòâîì ðåáåð (edge set) ãðàôà; åãî ýëåìåíòû íàçûâàþò ðåáðàìè
.
 íåîðèåíòèðîâàííîì (underected) ãðàôå G=(V,E) ìíîæåñòâî ðåáåð E ñîñòîèò èç
íåóïîðÿäî÷åííûõ (unordered) ïàð âåðøèí :
ïàðàìè ÿâëÿþòñÿ ìíîæåñòâà {u,v}, ãäå u,vÎ V è u ¹v. Áóäåì îáîçíà÷òü
íåîðèåíòèðîâàííîå ðåáðî êàê
(u,v) âìåñòî {u,v}; ïðè ýòîì äëÿ íåîðèåíòèðîâàííîãî ãðàôà (u,v) è
(v,u) îáîçíà÷àþò îäíî è òî æå
ðåáðî.
Ïðî ðåáðî (u,v)
îðãðàôà ãîâîðÿò, ÷òî îíî âûõîäèò èç (incident from, leaves) âåðøèíû u è âõîäèò
(incident to, enters) â âåðøèíó v. Ïðî ðåáðî (u,v)
íåîðãðàôà ãîâîðÿò, ÷òî îíî èíöèäåíòíà âåðøèíàì (incident on vertics) u è v.
Åñëè â
ãðàôå G èìååòñÿ ðåáðî (u,v), òî ãîâîðÿò,
÷òî âåðøèíà v ñìåæíà ñ
âåðøèíîé u (is adjacent to u). Äëÿ îðèåíòèðîâàííûõ
ãðàôîâ îòíîøåíèå ñìåæíîñòè ÿâëÿåòñÿ
ñèììåòðè÷íûì, íî äëÿ
îðèåíòèðîâàííûõ ãðàôîâ ýòî
íå îáÿçàòåëüíî.
Ñòåïåíüþ (degree) âåðøèíû â íåîðèåíòèðîâàííîì ãðàôå íàçûâàåòñÿ
÷èñëî èíöèäåíòíûõ åé
ðåáåð.Äëÿ îðèåíòèðîâàííîãî ãðàôà ðàçëè÷àþò
èñõîäÿùóþ ñòåïåíü(out degree), îïðåäåëÿåìóþ êàê
÷èñëî âûõîäÿùèõ èç
íåå ðåáåð , è
âõîäÿùóþ ñòåïåíü(in-degree), îïðåäåëÿåìóþ êàê
÷èñëî âõîäÿùèõ â
íåå ðåáåð. Ñóììà èñõîäÿùåé
è âõîäÿùåé ñòåïåíåé íàçûâàþò
ñòåïåíüþ âåðøèíû.
Ïóòü äëèíû k (path of length k) èç
âåðøèíû u â âåðøèíó v
îïðåäåëÿåòñÿ êàê ïîñëåäîâàòåëüíîñòü âåðøèí (), â êîòîðîé
=u,
=v è (
,
)ÎE äëÿ âñåõ i=1,2,…,k.Òàêèì îáðàçîì,
ïóòü äëèíû k ñîñòîèò èç
k ðåáåð.Ýòîò ïóòü ñîäåðæèò âåðøèíû
è ðåáðà (
,
),(
,
),…,(
,
). Âåðøèíó
íàçûâàþò íà÷àëîì ïóòè , âåðøèíó
- åãî êîíöîì; ãîâîðÿò, ÷òî ïóòü âåäåò èç
â
. Åñëè äëÿ äàííûõ âåðøèí u è
ñóùåñòâóåò ïóòü ð èç
u â
, òî ãîâîðÿò, ÷òî âåðøèíà
äîñòèæèìà èç u ïî ïóòè ð .
Ïóòü íàçûâàåòñÿ ïðîñòûì,
åñëè âñå âåðøèíû â íåì ðàçëè÷íû.
Öèêëîì â
îðãðàôå íàçûâàåòñÿ ïóòü, â êîòîðîì íà÷àëüíàÿ âåðøèíà ñîâïàäàåò ñ
êîíå÷íîé è êîòîðûé ñîäåðæèò
õîòÿ æû îäíî ðåáðî. Öèêë íàçûâàåòñÿ ïðîñòûì
, åñëè â íåì
íåò îäèíàêîâûõ âåðøèí.
 íåîðèåíòèðîâàííîì ãðàôå ïóòü
<> íàçûâàåòñÿ
(ïðîñòûì) öèêëîì , åñëè k³3,
=
è âñå âåðøèíû
ðàçëè÷íû. Íåîðèåíòèðîâàííûé ãðàô íàçûâàåòñÿ
ñâÿçíûì, åñëè äëÿ
ëþáîé ïàðû âåðøèí ñóùåñòâóåò
ïóòü èç îäíîé â äðóãóþ.Äëÿ
íåîðèåíòèðîâàííîãî ãðàôà îòíîøåíèå “áûòü äîñòèæèìûì èç”
ÿâëÿåòñÿ îòíîøåíèåì ýêâèâàëåíòíîñòè íà
ìíîæåñòâå âåðøèí. Êëàññû åêâèâàëâíòíîñòè
íàçûâàþòñÿ ñâÿçíûìè êîìïîíåíòàìè ãðàôà. Íåîðèåíòèðîâàííûé
ãðàô ñâÿçàí òîãäà è òîëüêî òîãäà, êîãäà îí ñîñòîèò èç åäèíñòâåííîé ñâÿçíîé êîìïîíåíòû.
Îðèåíòèðîâàííûé ãðàô íàçûâàåòñÿ
ñèëüíî ñâÿçíûì , åñëè èç ëþáîé åãî
âåðøèíû äîñòèæèìà ëþáàÿ äðóãàÿ. Ëþáîé îðèåíòèðîâàííûé ãðàô ìîæíî ðàçáèòü íà
ñèëüíî ñâÿçíûå êîìïîíåíòû, êîòîðûå
îïðåäåëÿþòñÿ êàê êëàññû ýêâèâàëâíòíîñòè
îòíîøåíèÿ “u äîñòèæèìî èç
v è v äîñòèæèìî èç
u”.Îðèåíòèðîâàííûé ãðàô ñèëüíî ñâÿçàí òîãäà è òîëüêî òîãäà, êîãäà ñîñòîèò èç
åäèíñòâåííîé ñèëüíî ñâÿçíîé êîìïîíåíòû.
Ãðàô =(
,
) íàçûâàþò ïîäãðàôîì ãðàôà G=(V,E), åñëè
ÍE ,
ÍV.
Âûáîð ñîîòâåòñòâóþùåé ñòðóêòóðû äàííûõ äëÿ ïðåäñòàâëåíèÿ ãðàôà â ïàìÿòè êîìïüþòåðà èìååò ïðèíöèïèàëüíîå çíà÷åíèå ïðè ðàçðàáîòêå ýôôåêòèâíûõ àëãîðèòìîâ.
Ïðè ðåøåíèè çàäà÷ èñïîëüçóåòñÿ ñëåäóþùèå ÷åòûðå ñïîñîáà îïèñàíèÿ ãðàôà: ìàòðèöà ñìåæíîñòè; ìàòðèöà
èíöèäåíòíèñòè; ñïèñêè ñâçè è ïåðå÷åíü ðåáåð.
Ìàòðèöà ñìåæíîñòè –ýòî äâóìåðíûé
ìàññèâ ðàçìåðíîñòè (êîëè÷åñòâî_âåðøèí)´(êîëè÷åñòâî_âåðøèí)
A[i,j]= 1, åñëè âåðøèíà ñ íîìåðîì i
ñìåæàí ñ âåðøèíîé ñ íîìåðîì j;
A[i,j]=0, â ïðîòèâíîì
ñëó÷àå.
Íàïðèìåð:
ìàòðèöà ñìåæíîñòè äëÿ
äàííîãî ãðàôà
|
a |
b |
c |
d |
a |
0 |
1 |
1 |
0 |
b |
1 |
0 |
1 |
0 |
c |
1 |
1 |
0 |
1 |
d |
0 |
0 |
1 |
0 |
a . . b
c . . d
Ïîèñê â øèðèíó.
Ïîèñê â øèðèíó (breadth-first search) –îäèí èç áàçèñíûõ àëãîðèòìîâ, ñîñòàâëÿþùèé
îñíîâó ìíîãèõ äðóãèõ. Íàïðèìåð,
àëãîðèòì Äåéêñòðû ïîèñêà êðàò÷àéøèõ
ïóòåé èç îäíîé âåðøèíû è àëãîðèòì Ïðèìà ïîèñêà ìèíèìàëüíîãî ïîêðûâàþùåãî äåðåâà ìîãóò ðàññìàòðèâàòüñÿ êàê
îáîáùåíèå ïîèñêà â
øèðèíó.
Ïóñòü ôèêñèðîâàíà íà÷àëüíàÿ âåðøèíà s . Àëãîðèòì ïîèñêà â øèðèíó ïåðå÷èñëÿåò
âñå äîñòèæèìûå èç
s (åñëè èäåò ïî ðåáðàì) âåðøèíû â ïîðÿäêå âîçðàñòàíèÿ ðàññòîÿíèÿ îò s. Ðàññòîÿíèåì ñ÷èòàåòñÿ äëèíà (÷èñëî ðåáåð) êðàò÷àéøåãî
ïóòè.  ïðîöåññå ïîèñêà èç ãðàôà âûäåëÿåòñÿ ÷àñòü,
íàçûâàåìàÿ “äåðåâîì ïîèñêà â øèðèíó” ñ
êîðíåì s.Îíà
ñîäåðæèò âñå äîñòèæèìûå èç s âåðøèíû. Äëÿ êàæäîé èç íèõ
ïóòü èç êîðíÿ â äåðåâå ïîèñêà áóäåò îäíèì èç
êðàò÷àéøèõ ïóòåé (èç
íà÷àëüíîé âåðøèíû) â
ãðàôå. Àëãîðèòì ïðèìåíèì è ê îðèåíòèðîâàííûì è
ê íåîðèåíòèðîâàííûì ãðàôàì.
Íàçâàíèå îáúÿñíÿåòñÿ òåì,
÷òî â ïðîöåññå ïîèñêà ìû èäåì âøèðü, à íå
âãëóáü (ñíà÷àëà ïðîñìàòðèâàåì âñå
ñîñåäíèå âåðøèíû, çàòåì ñîñåäåé ñîñåäåé è
ò.ä.).
Äëÿ íàãëÿäíîñòè áóäåì ñ÷èòàòü,
÷òî â ïðîöåññå ðàáîòû àëãîðèòìà âåðøèíû ãðàôà ìîãóò áûòü áåëûìè, ñåðûìè è
÷åðíûìè. Á íà÷àëå îíè âñå áåëûå, íî â õîäå ðàáîòû àëãîðèòìà áåëàÿ âåðøèíà ìîæåò ñòàòü ñåðîé, à ñåðàÿ – ÷åðíîé
(íî íå íàîáîðîò). Ïîâñòðå÷àâ
íîâóþ âåðøèíó, àëãîðèòì ïîèñêà êðàñèò åå,
òàê ÷òî îêðàøåííûå âåðøèíû(ñåðûå èëè
÷åðíûå) – ýòî â
òî÷íîñòè òå, êîòîðûå óæå îáíàðóæåíû. Ðàçëè÷èå ìåæäó ñåðûìè è
÷åðíûìè âåðøèíàìè èñïîëüçóåòñÿ àëãîðèòìîì äëÿ óïðàâëåíèÿ ïîðÿäêîì îáõîäà :
ñåðûå âåðøèíû îáðàçóþò “ëèíèþ ôðîíòà”, à
÷åðíûå – “òûë”. Áîëåå òî÷íî, ïîääåðæèâàåòñÿ òàêîå ñâîéñòâî:
åñëè (u,v) Î E è u ÷åðíàÿ, òî
v- ñåðàÿ èëè
÷åðíàÿ âåðøèíà. Òàêèì îáðàçîì,
òîëüêî ñåðóå âåðøèíû ìîãóò èìåòü ñìåæíûå íåîáíàðóæåííûå
âåðøèíû.
Âíà÷àëå äåðåâî ïîèñêà ñîñòîèò òîëüêî èç êîðíÿ- íà÷àëüíîé âåðøèíû s. Êàê òîëüêî àëãîðèòì îáíàðóæèâàåò íîâóþ âåðøèíó v, ñìåæíóþ ñ ðàíåå íàéäåííîé âåðøèíîé
u, âåøèíà v (âìåñòå ñ ðåáðîì (u,v)) äîáàâëÿåòñÿ ê
äåðåâó ïîèñêà, ñòàíîâÿñü ðåáåíêîì
âåðøèíû u, à
u ñòàíîâèòñÿ ðîäèòåëåì v. Êàæäàÿ âåðøèíà îáíàðóæèâàåòñÿ
òîëüêî îäèí ðàç,
òàê ÷òî äâóõ ðîäèòåëåé
ó íåå áûòü íå ìîæåò. Ïîíÿòèÿ ïðåäêà è ïîòîìêà îïðåäåëÿþòñÿ êàê
îáû÷íî (ïîòîìêè-ýòî
äåòè, äåòè äåòåé, è ò.ä.).
Äâèãàÿñü îò âåðøèíû ê êîðíþ, ìû
ïðîõîäèì âñåõ åå
ïðåäêîâ.
Ïðèâåäåííàÿ íèæå ïðîöåäóðà èñïîëüçóåò ïðåäñòàâëåíèå
ãðàôà ìàòðèöåé ñìåæíûõ âåðøèí. Äëÿ êàæäîé âåðøèíû u ãðàôà äîïîëíèòåëüíî õðàíèòñÿ åå öÿåò color[u] è åå
ïðåäøåñòâåííèê pr[u].
Êðîìå òîãî , ðàññòîÿíèå îò
s äî u çàïèñûâàåòñÿ â ïîëå d[u]. Ïðîöåäóðà èñïîëüçóåò òàêæå îÿåðåäü Q (FIFO) äëÿ õðàíåíèÿ
ìíîæåñòâà ñåðûõ âåðøèí.
#include
"iostream.h"
#include
"fstream.h"
void
int main()
{
int m;//íîìåð
îáðàáàòûâàåìîé
âåðøèíû
int
N;//êîëè÷åñòâî
âåðøèí
int **
mat;//ìàòðèöà ñìåæíîñòè
ifstream fin("input.txt");
ofstream fout ("output.txt");
fin>>N;
mat=new int *[N];
for(int i=0;i<N;i++)
mat[i]=new int [N];
for(int j=0;j<N;j++)
for(int o=0;o<N;o++)
fin>>mat[j][o];//ïðî÷ëè
èç ôàéëà
int
*color;//öâåò 0-áåëûé,
1-ñåðûé,2-÷åðíûé
int *
d;//ðàññòîÿíèå
int *
pr;//ïðåäøåñòâåííèê
int
*Q;//î÷åðåäü äëÿ
ñìåæíûõ
âåðøèí
color=new int [N];
d=new int [N];
pr=new int [N];
Q=new int [N];
for(int s=0;s<N;s++)
{
color[s]=0;
d[s]= 0;
pr[s]=0;
}
Q[0]=0;
int count=1;//
ñ÷åò÷èê äëÿ Q
fout<<"Ocherednost
passmatrivanija vershin:"<<'\n';
while(count!=0)
{
m=Q[0];
fout<<m<<" -Nomer
vershini"<<'\n';
for(int k=1;k<N;k++)
{
if(mat[m][k]==1)//
åñëè k ñìåæíà
ñ m
{if(color[k]==0)
{ color[k]=1;
d[k]=d[m]+1;
pr[k]=m;
Q[count]=k;
count++;}}
}
count--;
color[m]=2;
}
for(int h=0;h<N;h++)
{fout<< "Ver_Num
"<<h<<" Wes
"<<d[h]<<'\n';}
delete
[] color;
delete [] d;
delete [] pr;
delete [] Q;
for(int f=0;f<N;f++)
delete [] mat[f];
delete mat;
return 0;
}
void
{
for(int k=0;k<a;k++)
A[k]=A[k+1];
A[a-1]=-1;
return;
}
Ïðèìåð:
input.txt
5 0 1 0 0 1 1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 1 1 1 1 0
output.txt
Ïîèñê â ãëóáèíó.
Ñòðàòåãèÿ ïîèñêà â ãëóáèíó òàêîâà: èäòè “âãëóáü”, ïîêà ýòî âîçìîæíî (åñòü íåïðîéäåííûå
èñõîäÿùèå ðåáðà), è
âîçâðàùàòüñÿ è èñêàòü äðóãîé ïóòü, êîãäà òàêîõ ðåáåð íåò.
Òàê äåëàåòñÿ ïîêà íå îáíàðóæåíû âñå
âåðøèíû , äîñòèæèìûå èç
èñõîäíîé. (Åñëè ïîñëå ýòîãî îñòàþòñÿ íåîáíàðóæåííûå âåðøèíû , ìîæíî âûáðàòü îäíó èç íèõ è
ïîâòîðèòü ýòîò ïðîöåññ, è äåëàòü òàê
äî òåõ ïîð,
ïîêà ìû íå
îáíàðóæèì âñå âåðøèíû ãðàôà.)
Êàê è
ïðè ïîèñêå â
øèðèíó, îáíàðóæèâ (âïåðâûå) âåðøèíó v, ñìåæíóþ ñ
u, ìû îòìå÷àåì ýòî ñîáûòèå, ïîìåùàÿ â ïîëå pr[u] çíà÷åíèå u.Ïîëó÷àåòñÿ äåðåâî èëè íåñêîëüêî äåðåâüåâ, åñëè ïîèñê ïîâòîðÿåòñÿ èç íåñêîëüêèõ âåðøèí. Ãîâîðÿ äàëüøå î ïîèñêå â
ãëóáèíó, âñåãäà áóäåì ïðåäïîëàãàòü
, ÷òî òàê è
äåëàåòñÿ (ïîèñê ïîâòîðÿåòñÿ). Ïîëó÷àåì ïîäãðàô ïðåäøåñòâîâàíèÿ, îïðåäåëåííûé òàê:
, ãäå
Ïîäãðàô ïðåäøåñòâîâàìèÿ ïðåäñòàâëÿåò ñîáîé ëåñ ïîèñêà â
ãëóáèíó, ñîñòîÿùèé èç
äåðåâüåâ ïîèñêà â
ãëóáèíó.
Àëãîðèòì ïîèñêà â ãëóáèíó òàêæå èñïîëüçóåò
öâåòà âåðøèí. Êàæäàÿ èç âåðøèí âíà÷àëå áåëàÿ. Áóäó÷è îáíàðóæåííîé, îíà ñòàíîâèñÿ
ñåðîé;îíà ñòàíåò ÷åðíîé ,
êîãäà áóäåò ïîëíîñòüþ îáðàáîòàíà, ò.å. êîãäà ñïèñîê ñìåæíûõ ñ
íåé âåðøèí áóäåò ïðîñìîòðåí.
Êàæäàÿ âåðøèíà ïîïàäàåò ðîâíî â îäíî äåðåâîïîèñêà
â ãëóáèíó, òàê ÷òî ýòè äåðåâüÿ íå ïåðåñåêàþòñÿ.
Ïîìèìî
ýòîãî, ïîèñê â
ãëóáèíó ñòàâèò íà
âåðøèíàõ ìåòêè âðåìåíè. Êàæäàÿ âåðøèíà èìååò äâå ìåòêè: â
d[u] çàïèñàíî, êîãäà ýòà âåðøèíà áûëà îáíàðóæåíà (è
ñäåëàíà ñåðîé), à
â f[u] – êîãäà áûëà çàêîí÷åíà îáðàáîòêà ñïèñêà ñìåæíûõ âåðøèí (è v ñòàë ÷åðíîé).
Ýòè ìåòêè âðåìâíè èñïîëüçóþòñÿ âî
ìíîãèõ àëãîòèìàõ íà
ãðàôàõ è ïîëåçíû äëÿ àíàëèçà ñâîéñòâ ïîèñêà â ãëóáèíó.
 ïðèâîäèìîé äàëåå ïðîöåäóðå DFS( Depth-First Search- ïîèñêà â ãëóáèíó) ìåòêè âðåìåíè d[u] è
f[u] ÿâëÿþòñÿ öåëûìè ÷èñëàìè îò
1 äî 2|V| ; äëÿ ëþáîé âåðøèíû âûïîëíåíî íåðàâåíñòâî d[u]<
f[u].
Âåðøèíà u áóäåò áåëîé äî ìîìåíòà d[u], ñåðîé ìåæäó d[u] è
f[u] è
÷åðíîé ïîñëå f[u].
Èñõîäíûé ãðàô ìîæåò áûòü îðèåíòèðîâàííûì èëè
íåîðèåíòèðîâàííûì. Ïåðåìåííàÿ time – ãëîáàëüíàÿ ïåðåìåííàÿ òåêóùåãî
âðåìåíè, èñïîëüçóåìîãî äëÿ
ïîìåòîê.
#include
"iostream.h"
#include
"fstream.h"
void DFS_Visit(int
** ,int *,int*,int*,int*,int);//ìàòð,öâåò,íà÷àëîîáíàð,êîíåöîáðàáîòêè,âåðøèíà
int time;
int
N;//êîëè÷åñòâî
âåðøèí
int main()
{
time=0;
ifstream fin ("input.txt");
ofstream fout("output.txt");
fin>>N;
int ** mat;//ìàòðèöà
ñìåæíîñòè
mat=new int *[N];
for(int i=0;i<N;i++)
mat[i]=new int [N];
for(int j=0;j<N;j++)
for(int o=0;o<N;o++)
fin>>mat[j][o];//ïðî÷ëè
èç ôàéëà
int *color;//öâåò
0-áåëûé,
1-ñåðûé,2-÷åðíûé
int * d;//âðåìÿ
îáíàðóæåíèÿ
int *
pr;//ïðåäøåñòâåííèê
int * f;//âðåìÿ
îêîí÷àíèÿ
îáðàáîòêè
color=new int [N];
d=new int [N];
pr=new int [N];
f=new int [N];
for(int s=0;s<N;s++)
{
color[s]=0;
pr[s]=-1;
}
for(int k=0;k<N;k++)
if(color[k]==0)
DFS_Visit(mat,color,d,f,pr,k);
for(int r=0;r<N;r++)
fout<<"Num_Versh-
"<<r<<"
Predshestvennik- "<<pr[r]<<" "<<d[r]<<"-nachalo;
konec- "<<f[r]<<'\n';
delete [] d;
delete [] pr;
delete [] f;
delete [] color;
for(int u=0;u<N;u++)
delete [] mat[u];
delete mat;
return 0;
}
void DFS_Visit(int
** A,int * col,int * D,int *F,int * Pr,int u)
{
col[u]=1;
time=time+1;
D[u]=time;
for(int p=0;p<N;p++)
{
if(A[u][p]==1)
{
if(col[p]==0)
{
Pr[p]=u;
DFS_Visit(A,col,D,F,Pr,p);
}
}
}
col[u]=2;
time=time+1;
F[u]=time;
}
Ïðèìåð:
6 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1
input.txt
Output.txt
Num_Versh- 0 Predshestvennik- -1 1-nachalo; konec- 8 Num_Versh- 1 Predshestvennik- 0 2-nachalo; konec- 7 Num_Versh- 2
Predshestvennik- -1
9-nachalo; konec- 12 Num_Versh- 3 Predshestvennik- 4 4-nachalo; konec- 5 Num_Versh- 4 Predshestvennik- 1 3-nachalo; konec- 6 Num_Versh- 5
Predshestvennik- 2
10-nachalo; konec- 11
Ýéëåðîâ öèêë.
Òðåáóåòñÿ íàéòè öèêë, ïðîõîäÿùèé ïî
êàæäîé äóãå ðîâíî îäèí ðàç. Ýòó çàäà÷ó âïåðâûå ïîñòàâèë è ðåøèë Ëåîíàðä Ýéëåð, ÷åì è
çàëîæèë îñíîâû òåîðèè ãðàôîâ, à
ñîîòâåòñòâóþùèå öèêëû òåïåðü íàçûâàþòñÿ ýéëåðîâûìè. Ôèãóðû,
êîòîðûå òðåáóåòñÿ îáðèñîâàòü, íå ïðåðûâàÿ è íå ïîâòîðÿÿ ëèíèè, òàêæå îòíîñÿòñÿ ê ýéëåðîâûì öèêëàì.
Çàäà÷à âîçíèêëà èç ïðåäëîæåííîé Ýéëåðó ãîëîâîëîìêè,
ïîëó÷èâøåé íàçâàíèå "ïðîáëåìà êåíèãñáåðãñêèõ ìîñòîâ". Ðåêà
Ïðåãåëü, ïðîòåêàþùàÿ ÷åðåç Êàëèíèíãðàä
(ïðåæäå ãîðîä íàçûâàëñÿ Êåíèãñáåðãîì),
îìûâàåò äâà îñòðîâà. Áåðåãà ðåêè ñâÿçàíû ñ îñòðîâàìè òàê,
êàê
ýòî ïîêàçàíî íà ðèñóíêå.
 ãîëîâîëîìêå òðåáîâàëîñü íàéòè ìàðøðóò, ïðîõîäÿùèé ïî
âñåì ó÷àñòêàì ñóøè òàêèì îáðàçîì, ÷òîáû êàæäûé èç
ìîñòîâ áûë ïðîéäåí ðîâíî îäèí ðàç,
à íà÷àëüíûé è
êîíå÷íûé ïóíêòû ìàðøðóòà ñîâïàäàëè.
Äàäèì
òåïåðü ñòðîãîå îïðåäåëåíèå ýéëåðîâó öèêëó è ýéëåðîâó ãðàôó. Åñëè ãðàô èìååò öèêë (íå
îáÿçàòåëüíî ïðîñòîé), ñîäåðæàùèé âñå
ðåáðà ãðàôà ïî
îäíîìó ðàçó, òî
òàêîé öèêë íàçûâàåòñÿ ýéëåðîâûì
öèêëîì, à ãðàô íàçûâàåòñÿ
ýéëåðîâûì ãðàôîì.
ßñíî, ÷òî ýéëåðîâ öèêë ñîäåðæèò íå òîëüêî âñå
ðåáðà ïî îäíîìó ðàçó, íî è
âñå âåðøèíû ãðàôà (âîçìîæíî,
ïî íåñêîëüêî ðàç).
Î÷åâèäíî òàêæå, ÷òî ýéëåðîâûì ìîæåò áûòü òîëüêî ñâÿçíûé ãðàô.
Âûáåðåì â
êà÷åñòâå âåðøèí ãðàôà áåðåãà ðåêè, à
â êà÷åñòâå ðåáåð - ìîñòû, èõ ñîåäèíÿþùèå. Ïîñëå ýòîãî çàäà÷à ñòàíîâèòñÿ î÷åâèäíîé: òðåáîâàíèå íåîñóùåñòâèìî - ÷òîáû åãî âûïîëíèòü, ÷èñëî äóã, ïðèõîäÿùèõ ê
êàæäîé âåðøèíå, äîëæíî áûòü ÷åòíûì. Â
ñàìîì äåëå, ïîñêîëüêó ïî
îäíîìó ìîñòó íåëüçÿ ïðîõîäèòü
äâàæäû, êàæäîìó âõîäó íà áåðåã äîëæåí ñîîòâåòñòâîâàòü
âûõîä.
×òî íåîáõîäèìî, ÷òîáû â ãðàôå ñóùåñòâîâàë
ýéëåðîâ öèêë? Âî-ïåðâûõ, ãðàô äîëæåí áûòü ñâÿçàííûì: äëÿ ëþáûõ äâóõ âåðøèí äîëæåí ñóùåñòâîâàòü ïóòü, èõ ñîåäèíÿþùèé. Âî-âòîðûõ, äëÿ íåîðèåíòèðîâàííûõ ãðàôîâ ÷èñëî ðåáåð â
êàæäîé âåðøèíå äîëæíî áûòü ÷åòíûì. Íà
ñàìîì äåëå ýòîãî îêàçûâàåòñÿ äîñòàòî÷íî.
Òåîðåìà . ×òîáû â ñâÿçàííîì íåîðèåíòèðîâàííîì
ãðàôå G
ñóùåñòâîâàë ýéëåðîâ öèêë,
íåîáõîäèìî è äîñòàòî÷íî,
÷òîáû ÷èñëî âåðøèí íå÷åòíîé ñòåïåíè
ðàâíÿëàñü íóëþ.
Äîêàçàòåëüñòâî.
Íåîáõîäèìîñòü. Ëþáîé ýéëåðîâ öèêë äîëæåí ïðèéòè â
âåðøèíó ïî îäíîìó ðåáðó è ïîêèíóòü åå ïî äðóãîìó, òàê êàê ëþáîå ðåáðî äîëæíî èñïîëüçîâàòüñÿ ðîâíî îäèí ðàç. Ïîýòîìó, åñëè G ñîäåðæèò ýéëåðîâ öèêë, òî ñòåïåíè âåðøèí äîëæíû áûòü ÷åòíûìè.
Äîñòàòî÷íîñòü. Ïóñòü G — ñâÿçíûé íåîðèåíòèðîâàííûé
ãðàô, âñå âåðøèíû êîòîðîãî
èìåþò ÷åòíóþ ñòåïåíü. Íà÷íåì ïóòü èç
íåêîòîðîé ïðîèçâîëüíîé âåðøèíû x0 è
ïîéäåì ïî íåêîòîðîìó ðàíåå íå èñïîëüçîâàííîìó ðåáðó ê ñëåäóþùåé âåðøèíå, è òàê äî
òåõ ïîð, ïîêà íå âåðíåìñÿ â
âåðøèíó x0 è íå çàìêíåì öèêë. Åñëè âñå
ðåáðà îêàæóòñÿ èñïîëüçîâàííûìè, òî
íóæíûé ýéëåðîâ öèêë ïîñòðîåí.
Åñëè æå íåêîòîðûå ðåáðà íå èñïîëüçîâàíû, òî
ïóñòü Ô — òîëüêî ÷òî ïîñòðîåííûé öèêë. Òàê êàê ãðàô G
ñâÿçåí, òî öèêë Ô äîëæåí ïðîõîäèòü ÷åðåç íåêîòîðóþ âåðøèíó, ñêàæåì xi, ÿâëÿþùóþñÿ êîíå÷íîé âåðøèíîé
êàêîãî-ëèáî äî
ñèõ ïîð íå
èñïîëüçîâàííîãî ðåáðà. Åñëè óäàëèòü âñå ðåáðà, ïðèíàäëåæàùèå
Ô, òî â
îñòàâøåìñÿ ãðàôå âñå
âåðøèíû ïî-ïðåæíåìó áóäóò èìåòü ÷åòíóþ ñòåïåíü,
òàê êàê â
öèêëå Ô äîëæíî áûòü ÷åòíîå ÷èñëî ðåáåð (0
ÿâëÿåòñÿ ÷åòíûì ÷èñëîì), èíöèäåíòíûõ
êàæäîé âåðøèíå.
Íà÷èíàÿ òåïåðü ñ xi, ïîëó÷àåì öèêë Ô’, íà÷èíàþùèéñÿ è
îêàí÷èâàþùèéñÿ â xi. Åñëè âñå îñòàâøèåñÿ ðàíåå ðåáðà èñïîëüçîâàíû äëÿ
öèêëà Ô’, òî ïðîöåññ îêîí÷åí. Íóæíûé ýéëåðîâ öèêë áóäåò îáðàçîâàí
÷àñòüþ öèêëà Ô
îò âåðøèíû x0 äî xi, çàòåì öèêëîì Ô’ è,
íàêîíåö, ÷àñòüþ öèêëà Ô îò âåðøèíû xi äî x0. Åñëè æå âñå
åùå îñòàëèñü íåèñïîëüçîâàííûå ðåáðà, òî îáúåäèíåíèå ïîñòðîåííûõ âûøå öèêëîâ Ô è
Ô’ äàåò íîâûé öèêë Ô. Ìû
ñíîâà ìîæåì íàéòè âåðøèíó xj, ïðèíàäëåæàùóþ öèêëó è ÿâëÿþùóþñÿ êîíöåâîé âåðøèíîé
íåêîòîðîãî íåèñïîëüçîâàííîãî ðåáðà. Çàòåì ìû ìîæåì ïðèñòóïèòü
ê ïîñòðîåíèþ íîâîãî öèêëà Ô’, íà÷èíàâøåãîñÿ â
xj, è òàê
äî òåõ ïîð,
ïîêà íå áóäóò èñïîëüçîâàíû
âñå ðåáðà è
íå áóäåò ïîëó÷åí òàêèì îáðàçîì ýéëåðîâ öèêë Ô. Ýòî äîêàçûâàåò
òåîðåìó.Õîòÿ äîêàçàòåëüñòâî ïðîâåäåíî äëÿ íåîðèåíòèðîâàííûõ ãðàôîâ, îíî ñðàçó ïåðåíîñèòñÿ íà
îðèåíòèðîâàííûå, òîëüêî òðåáîâàíèå ÷åòíîñòè çàìåíÿåòñÿ òåïåðü íà òàêîå: ÷èñëî
âõîäÿùèõ â êàæäóþ
âåðøèíó ðåáåð äîëæíî áûòü
ðàâíî ÷èñëó âûõîäÿùèõ.
Àëãîðèòì ïîñòðîåíèÿ ýéëåðîâà öèêëà çàêëþ÷àåòñÿ â
ñëåäóþùåì. Íà÷èíàÿ ñ
ïðîèçâîëüíîé âåðøèíû (äëÿ êîíêðåòíîñòè,
ñ ïåðâîé âåðøèíû), ñòðîèì
ïóòü, ûäàëÿÿ ðåáðà è çàïîìèíàÿ âåðøèíû â ñòåêå, äî
òåõ ïîð, ïîêà ìíîæåñòâî
ñìåæíîñòè î÷åðåäíîé âåðøèíû íå îêàæåòñÿ ïóñòûì, ÷òî îçíà÷àåò, ÷òî ïóòü óäëèíèòü íåëüçÿ. Ïðè ýòîì ñ íåîáõîäèìîñòüþ ïðèäåì â òó âåðøèíó, ñ êîòîðîé íà÷àëè.  ïðîòèâíîì ñëó÷àå ýòî îçíà÷àëî áû,
÷òî âåðøèíà èìååò íå÷åòíóþ
ñòåïåíü, ÷òî íå
âîçìîæíî ïî óñëîâèþ. Òàêèì îáðàçîì, èç
ãðàôà áûëè óäàëåíû ðåáðà öèêëà, à
âåðøèíû öèêëà áûëè ñîõðàíåíû
â ñòåêå. Ïðè ýòîì ñòåïåíè âñåõ âåðøèí îñòàëèñü
÷åòíûìè. Äàëåå ýòà
âåðøèíà âûâîäèòñÿ â
êà÷åñòâå ïåðâîé âåðøèíû ýéëåðîâà
öèêëà, à ïðîöåññ ïðîäîëæàåòñÿ
, íà÷èíàÿ ñ âåðøèíû, ñòîÿùåé
íà âåðøèíå ñòåêà.
Header
File
#include
"iostream.h"
#
include "stdlib.h"
struct
node
{ int info;
node * link;
};
class
Stack
{
private:
node * first;
public:
Stack();
~Stack();
bool Empty();
void Pop(int&);
void Push(int);
};
Stack
::Stack()
{first=
NULL;}
Stack::~Stack()
{node
*p=first, *q;
while(p)
{ q=p;
p=p->link;
delete q;
}
}
bool
Stack::Empty()
{ if(first==NULL)
return true;
else
return false;
}
void
Stack::Pop(int &k)
{ if(Empty()==true)
{ cout<<"ErrorP"<<endl;
exit(1);
}
else
{ node
* p=first;
k=first->info;
first=first->link;
delete
p;
return;
}
}
void
Stack::Push(int k)
{node
* q;
q=new node;
if(q)
{
q->info=k;
q->link=first;
first=q;
return;
}
else
{ cout<<"Erroe";
exit(1);
}
}
Source File
#include
"iostream.h"
#include
"fstream.h"
#
include "stk.h"
int
main()
{
Stack S;
int d;//äëÿ
ïîäñ÷åòà
ñòåðåíåé
âåðøèí
int
m;//òåêóùàÿ
âåðøèíà
int sum;// äëÿ
ïîäñ÷åòà
ñìåæíûõ
âåðøèí
int
N;//êîëè÷åñòâî
âåðøèí
int **
mat;//ìàòðèöà
ñìåæíîñòè
ifstream fin("input.txt");
ofstream fout ("output.txt");
fin>>N;
mat=new int *[N];
for(int i=0;i<N;i++)
mat[i]=new int [N];
for(int j=0;j<N;j++)
for(int o=0;o<N;o++)
fin>>mat[j][o];
for(int g=0;g<N;g++)//
ïðîâåðÿåìá
åñòü ëè
ýéëåðîâ öèêë
{d=0;
for(int h=0;h<N;h++)
d=d+mat[g][h];
if(d%2!=0)
{fout<<"Eulerov cikla
net"<<'\n';
return 0;}
}
S.Push(0); //
åñòü öèêë,
íàéäåì åãî
while(!S.Empty())
{ sum=0;
S.Pop(m);
S.Push(m);
for(int
t=0;t<N;t++)
sum=sum +mat[m][t];
if(sum==0)
{ S.Pop(m);
fout<<m<<"
";
}
else
{ for(int r=0;r<N;r++)
if(mat[m][r]==1)
{ S.Push(r);
mat[m][r]=0;
mat[r][m]=0;
break;
}
}
}
for(int
u=0;u<N;u++)
delete [] mat[u];
delete mat;
return 0;
}
Ïðèìåð:
input.txt
0 6 1 4 3 2 1 0 7 0 1 0 0 0 0 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1 0 1 1 1 0 0 1 1 0
Ïîñëå 7-îãî øàãà ñòåê: , ïîòîì 0 âûâîäèòñÿ.
6 5 4 6 1 4 3 2 1 0
output.txt
0 6 5 4 6 1 4
3 2 1 0
Ïîñëå 10-îãî øàãà ñòåê: , è âñå îñòàëüíûå
ïîî÷åðåäíî âûâîäÿòñÿ.
1. Êîðìåí, Ëåéçåðñîí “Àëãîðèòìû, ïîñòðîåíèå è àíàëèç”.
2. Ñ.Îêóëîâ “Ïðîãðàììèðîâàíèå â àëãîðèòìàõ”.