<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://discopal.ispras.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%BE%D0%B2_%D1%86%D0%B8%D0%BA%D0%BB</id>
		<title>Эйлеров цикл - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://discopal.ispras.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%BE%D0%B2_%D1%86%D0%B8%D0%BA%D0%BB"/>
		<link rel="alternate" type="text/html" href="https://discopal.ispras.ru/index.php?title=%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%BE%D0%B2_%D1%86%D0%B8%D0%BA%D0%BB&amp;action=history"/>
		<updated>2026-05-14T12:11:44Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://discopal.ispras.ru/index.php?title=%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%BE%D0%B2_%D1%86%D0%B8%D0%BA%D0%BB&amp;diff=1343&amp;oldid=prev</id>
		<title>WikiSysop: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://discopal.ispras.ru/index.php?title=%D0%AD%D0%B9%D0%BB%D0%B5%D1%80%D0%BE%D0%B2_%D1%86%D0%B8%D0%BA%D0%BB&amp;diff=1343&amp;oldid=prev"/>
				<updated>2008-08-04T09:55:55Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Эйлеровым путем''' в графе называется произвольный путь, проходящий через каждое ребро графа в точности один раз.&lt;br /&gt;
&lt;br /&gt;
Замкнутый эйлеров путь называется '''эйлеровым обходом''' или '''эйлеровым циклом'''.&lt;br /&gt;
&lt;br /&gt;
'''Эйлеров граф''' — граф, в котором существует эйлеров обход.&lt;br /&gt;
&lt;br /&gt;
Критерий эйлеровости графа:&lt;br /&gt;
«Эйлеров обход в графе существует тогда и только тогда, когда граф связный и все его вершины четной степени».&lt;br /&gt;
&lt;br /&gt;
Нахождение эйлерова цикла можно выполнить эффективно, с помощью нижепредставленного алгоритма, основная идея которого содержиться в построении произвольных замкнутых циклов (если вы окажетесь в эйлеровом графе, и будете идти произвольно по его ребрам, сжигая их после своего прохода, то рано или поздно вы вернетесь в точку старта), и обьединении таких циклов в единый эйлеров цикл.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
 def euler_circuit(G):&lt;br /&gt;
    EP=[]  # Эйлеров цикл - массив вершин.&lt;br /&gt;
    &lt;br /&gt;
    #возвращает локальный замкнутый цикл    &lt;br /&gt;
    def euler(v):&lt;br /&gt;
        cycle={}&lt;br /&gt;
        while (G.degree(v)&amp;gt;0):  #пока не оказались в &amp;quot;безвыходной&amp;quot; вершине&lt;br /&gt;
            w=G.neighbors(v)[0] # берем $w$ --- первого попавшегося &amp;quot;соседа&amp;quot; $v$ &lt;br /&gt;
            cycle[v]=w          # записываем ребро $(v,w)$ в $cycle$ и стираем его из графа&lt;br /&gt;
            G.delete_edge(v,w)&lt;br /&gt;
            v=w                 # повторяем все с вершиной $w$&lt;br /&gt;
        return cycle    &lt;br /&gt;
&lt;br /&gt;
    # добавляет цикл к эйлерову пути&lt;br /&gt;
    def add_cycle():        &lt;br /&gt;
        print EP,&amp;quot;+&amp;quot;,&lt;br /&gt;
        if len(EP)&amp;gt;0: # ищем вершину, к которой можно добавить цикл&lt;br /&gt;
            for i in range(0,len(EP)):&lt;br /&gt;
                if G.degree(EP[i])&amp;gt;0:&lt;br /&gt;
                    v=EP[i]&lt;br /&gt;
                    break&lt;br /&gt;
        else: # Подготавливаем пока пустой EP к присоединению цикла &lt;br /&gt;
            v=G.nodes()[0] # выбираем первую попавшуюся вершину&lt;br /&gt;
            EP.append(v)   # и добавляем ее в EP&lt;br /&gt;
            i=0    &lt;br /&gt;
        c=euler(v)&lt;br /&gt;
        print c,&amp;quot;--&amp;gt;&amp;quot;,    &lt;br /&gt;
        while c: # пока не перенесли все содержимое цикла   &lt;br /&gt;
            i=i+1; EP.insert(i,c[v]) #вставляем очередную вершину в EP        &lt;br /&gt;
            w=c[v] #переходим к следующей&lt;br /&gt;
            del c[v] #удаляя из цикла вставленную.&lt;br /&gt;
            v=w&lt;br /&gt;
        print EP&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    #Проверка, необходимых и достаточных условий существования&lt;br /&gt;
    for v in G.nodes(): &lt;br /&gt;
        if (G.degree(v) % 2)&amp;lt;&amp;gt;0: print &amp;quot;No Euler path!&amp;quot;; return&lt;br /&gt;
    &lt;br /&gt;
    while (G.number_of_edges()&amp;gt;0):&lt;br /&gt;
        add_cycle()          # добавляем цикл к эйлерову пути&lt;br /&gt;
            &lt;br /&gt;
    print EP&lt;br /&gt;
    return EP&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 [] + {0: 1, 1: 2, 2: 3, 3: 4, 4: 0} --&amp;gt; [0, 1, 2, 3, 4, 0]&lt;br /&gt;
 [0, 1, 2, 3, 4, 0] + {1: 4, 4: 1} --&amp;gt; [0, 1, 4, 1, 2, 3, 4, 0]&lt;br /&gt;
 [0, 1, 4, 1, 2, 3, 4, 0]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
 digraph G{ rankdir=LR; &lt;br /&gt;
 0 -&amp;gt; 1[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;1&amp;quot;,style=solid];&lt;br /&gt;
 1 -&amp;gt; 4[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;2&amp;quot;,style=solid];&lt;br /&gt;
 4 -&amp;gt; 1[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;3&amp;quot;,style=solid];&lt;br /&gt;
 1 -&amp;gt; 2[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;4&amp;quot;,style=solid];&lt;br /&gt;
 2 -&amp;gt; 3[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;5&amp;quot;,style=solid];&lt;br /&gt;
 3 -&amp;gt; 4[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;6&amp;quot;,style=solid];&lt;br /&gt;
 4 -&amp;gt; 0[fontcolor=&amp;quot;blue&amp;quot;,label=&amp;quot;7&amp;quot;,style=solid];&lt;br /&gt;
 } &lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Алгоритмы]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>	</entry>

	</feed>