Построение k непересекающихся остовных деревьев.
Теорема 7.1. Пусть граф G(V, E) таков что Замечание. Доказательство обобщается на случай , когда вершина z–точка сочленения, но ни одно из ребер с концами в z не является мостом. В частности, при Теорема 7.1 позволяет редуцировать граф, не уменьшая реберной связности. Это открывает широкие возможности для построения различных конструкций. В наших конструкциях также использует последовательные разрезы графа по вершинам опирается на теорему 7.1. Для построения нам также потребуется классический результат относительно минимально k–связных графов. Теорема 7.2. Пусть степени всех вершин мультиграфа G(V, E) строго более k и Замечание. Впервые результат теоремы 7.2 для графов без кратных ребер доказал . Это доказательство обобщается на случай мультиграфа . Перейдем к доказательству основного результата настоящей работы. Теорема 7.3. Пусть мультиграф G(V, E) (в нем допускается наличие кратных ребер, но запрещены петли) таков, что Доказательство. Будем доказывать теорему индукцией по количеству вершин в мультиграфе G0. База для мультиграфа с двумя вершинами очевидна. Предположим, что теорема доказана для любого 2 k– реберно связного мультиграфа, у которого меньше вершин, чем у G. По теореме 7.2, у графа G( V, E) существует остовный подграф G0( V, E0), такой, что Назовем новыми ребра графа G1, добавленные при разрезе по вершине z. Пусть этo ребра e1, …, em. Поскольку при построении разреза было добавлено k ребер, после чего были удалены петли, то m m1+m2+…+mk Если дерево Ti не содержит ни одного нового ребра, то оно является подграфом мультиграфа G. Поскольку множество вершин дерева Ti содержит все вершины графа G, кроме z, то добавив к Ti вершину z и любое ребро графа G с концом в z, мы получим остовное дерево T'i графа G. Отметим, что в этом случае для построения дерева T'i потребовалось одно ребро графа G, инцидентное вершине z (причем это ребро можно выбрать произвольно). Предположим, что mi>0, то есть дерево Ti содержит новые ребра. Поставим в соответствие дереву Ti подграф Ti* графа G, в котором каждое новое ребро xy дерева Ti заменим на два ребра xy и yz графа G. Каждое новое ребро в дереве Ti соответствует двум ребрам в графе Ti*, при этом, к вершинам дерева добавляется вершина z. Следовательно, мы получили связный остовный подграф Ti* графа G, в котором количество ребер на mi-1 больше , чем в дереве. Таким образом, в графе Ti* ровно mi-1 цикл, причем не трудно заметить, что каждый из этих циклов проходит через вершину z. Следовательно, из графа Ti* можно удалить mi-1 инцидентных вершине z ребер так, что получится отстовное дерево Ti' графа G. В дерево Ti' входит mi+1 ребро, инцидентное вершине z. По построению очевидно, что при i Пронумеруем k непересекающихся по ребрам остовных деревьев графа G таким образом, чтобы деревья T1, …, Tn содержали новые ребра, а деревья Tn+1, …, Tk не содержали новых ребер (где 0 (m1+1)+…+(mn+1)=(m1+m1+…+m1)+n Следовательно, в силу неравенства (2), и так как dG(z) §8 Необходимость условия
Мы покажм необходимость условия Определение.8.1. Пусть A Лемма 8.2. Пусть в графе G(V, E) есть k попарно непересекающихся по ребрам остовных дерева. Тогда для любого A Доказательство. Пусть T1, T2,…, Tk –остовные деревья графа G. По определению стягивания нетрудно заметить, что графы TA1, TA2,…, TAk связны и никакие два из них не имеют общих ребер. Определние 8.3. Пусть граф H(V, E) не имеет кратных ребер, a Для n> Текст программы unit diplom; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus, CheckLst, ActnList; type masiv = set of byte; TForm1 = class(TForm) BitBtn1: TBitBtn; Image1: TImage; Image2: TImage; ComboBox1: TComboBox; Label1: TLabel; procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormActivate(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } function Proverka(ind: byte): boolean; procedure Newselect(ind: byte); procedure Duga(ind:byte); procedure Graph; public { Public declarations } end; var Form1: TForm1;i:integer; b,b1,b2,b4:boolean; Data: array[1..20] of record x1,y1:integer;end; matr,matr_edit:array[1..40,1..40] of integer; mas_x,mas_y : masiv; x2,y2:integer; implementation {$R *.DFM} //************************esli mouse najata***************************** procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin canvas.MoveTo(x,y); x2:=x;y2:=y; if (ssleft in Shift) then b:=true else if (ssRight in Shift) then b:=false else end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var k,k1:integer; begin if b then begin Canvas.Brush.Color := clRed; canvas.Ellipse(x-10,y-10,x+10,y+10); inc(i); canvas.TextOut(x-3,y-6,inttostr(i)); Data[i].x1:=x;Data[i].y1:=y; combobox1.items.Append(inttostr(i)); end else //risovanie peteli if (x=x2) and (y=y2) then begin for k:=1 to i do if (sqr(X-data[k].x1)+sqr(Y-data[k].y1)<=100) then begin canvas.arc(data[k].x1,data[k].y1-30,data[k].x1+50,data[k].y1+30, data[k].x1+5,data[k].y1+2,data[k].x1,data[k].y1); break;end; end else //-------------------------- for k:=1 to i do if (sqr(X-data[k].x1)+sqr(Y-data[k].y1)<=100) then begin for k1:=1 to i do if (sqr(x2-data[k1].x1)+sqr(y2-data[k1].y1)<=100) then begin canvas.MoveTo(data[k1].x1,data[k1].y1);x2:=0;y2:=0;break;end; canvas.Lineto(data[k].x1,data[k].y1); matr[k1,k]:=1;matr[k,k1]:=1; matr_edit[k1,k]:=1;matr_edit[k,k1]:=1; matr[k,k]:=0;matr_edit[k,k]:=0; Combobox1.visible:=true; Label1.Visible:=true; end; end; //************************************************* procedure TForm1.FormActivate(Sender: TObject); var j:integer; begin for i:=1 to 20 do for j:=1 to 20 do matr[i,j]:=0; i:=0; x2:=0;y2:=0; b1:=false;b2:=false; b4:=true; combobox1.Items.Append('(None)'); Combobox1.visible:=false; Label1.Visible:=false; end; //**provereaet esli vershina imeet kratnye riobra********* function TForm1.Proverka(ind: byte): boolean; var sum,i1,i2: byte; begin sum:=0; for i1:=1 to i do sum:=sum+matr[ind,i1]; if ((sum mod 2) =0) then Proverka:=true else Proverka:=false; end; //*****delete vershinu******************************** procedure TForm1.Newselect(ind: byte); var ARect: TRect; i1,i2:integer; begin with Image2.Canvas do begin CopyMode :=Whiteness; ARect := Rect(0, 0, Image2.Width, Image2.Height); CopyRect(ARect, Image2.Canvas, ARect); CopyMode := cmSrcCopy; //*************************** for i1:=1 to i do for i2:=1 to i do matr_edit[i1,i2]:=matr[i1,i2]; if proverka(ind) then for i2:=1 to i do begin matr_edit[ind,i2]:=0; matr_edit[i2,ind]:=0; end; if (proverka(ind)) then begin image2.Canvas.Brush.Color := clRed; image2.canvas.pen.color:=clblack; for i1:=1 to i do for i2:=1 to i do if matr_edit[i1,i2]=1 then begin image2.canvas.Ellipse(data[i1].x1-10,data[i1].y1-10, data[i1].x1+10,data[i1].y1+10); image2.canvas.TextOut(data[i1].x1-3,data[i1].y1-6,inttostr(i1)); image2.canvas.MoveTo(data[i1].x1,data[i1].y1); image2.canvas.Lineto(data[i2].x1,data[i2].y1); end; end; end;end; //---------------------------------------------------------- procedure TForm1.Graph; var i1,i2:integer; ARect: TRect; begin with Image2.Canvas do begin CopyMode :=Whiteness; ARect := Rect(0, 0, Image2.Width, Image2.Height); CopyRect(ARect, Image2.Canvas, ARect); CopyMode := cmSrcCopy; image2.Canvas.Brush.Color := clRed; image2.canvas.pen.color:=clblack; for i1:=1 to i do for i2:=1 to i do if matr[i1,i2]=1 then begin image2.canvas.Ellipse(data[i1].x1-10,data[i1].y1-10, data[i1].x1+10,data[i1].y1+10); image2.canvas.TextOut(data[i1].x1-3,data[i1].y1-6,inttostr(i1)); image2.canvas.MoveTo(data[i1].x1,data[i1].y1); image2.canvas.Lineto(data[i2].x1,data[i2].y1); end; end; end; //****soedineam dve sosednie vershiny*********************** procedure TForm1.Duga(ind:byte); var v,i2,a1,d1,a2,d2,a,b: integer; R:double; s_1:array[1..2] of integer; begin v:=1; if proverka(ind) then for i2:=1 to i do begin if ((matr[ind,i2]=1) and (ind<>i2)) then begin s_1[v]:=i2;inc(v); end; if v=3 then begin a2:=data[s_1[1]].x1;d2:=data[s_1[1]].y1; a1:=data[s_1[2]].x1;d1:=data[s_1[2]].y1; a:=round((sqr(a1)+sqr(d1)-sqr(a2)-sqr(d2))/(2*(a1+d1-a2-d2))); b:=a; R:=sqrt(sqr(a2-a)+sqr(d2-b)); image2.canvas.pen.color:=clblue; image2.Canvas.arc(round(a-R),round(a-R),round(a+R),round(a+R),a1,d1,a2,d2); v:=1; end; end;end; //*******vybor vershin************************************ procedure TForm1.ComboBox1Change(Sender: TObject); begin if combobox1.ItemIndex = 0 then Graph else begin newselect(combobox1.ItemIndex); duga(combobox1.ItemIndex); end; end; end.
Вывод Целью моей дипломной работы была исследовать задачу на построение разреза в графе по вершине z. Был разработан алгоритм, который строит разрез по заданому графу. По данному алгоритму была написанна программа. Алгортм заключался в следующем: задается граф, по нем строится матрица смежности. В матрице суммируется строка и если при делении на два остаток от деления равен нулю, тогда данную вершину удаляют, а те вершины которые были смежные с ней соединяются между собой.
Популярное: Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ![]() ©2015-2024 megaobuchalka.com Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (315)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |