Graph [i] .Title; .aGraph [i] .visible=this.aGraph [i] .Visible;
}
//потім підготувати вершіни.aVertex=new VertexSerialization [this.aVertex.Count]; (int i=0; i lt; tns.aVertex.Length; i ++)
{. aVertex [i]=new VertexSerialization () ;. aVertex [i] .colorR=this.aVertex [i] .Color.R; .aVertex [i] .colorG=this.aVertex [i] .Color.G; .aVertex [i] .colorB=this.aVertex [i] .Color.B; .aVertex [i] .deleted=this.aVertex [i] .Deleted; .aVertex [i]. description=this.aVertex [i] .Description; .aVertex [i] .enabled=this.aVertex [i] .Enabled; .aVertex [i] .selected=this.aVertex [i] .Selected; .aVertex [i].title=this.aVertex [i] .Title; .aVertex [i] .visible=this.aVertex [i] .Visible; .aVertex [i] .x=this.aVertex [i] .X; .aVertex [i ] .y=this.aVertex [i] .Y; .aVertex [i] .iGraph=this.aVertex [i] .iGraph;
}
//і, нарешті підготувати р? бра.aEdge=new EdgeSerialization [this.aEdge.Count]; (int i=0; i lt; tns.aEdge.Length; i ++)
{. aEdge [i]=new EdgeSerialization () ;. aEdge [i] .colorR=this.aEdge [i] .Color.R; .aEdge [i] .colorG=this.aEdge [i] .Color.G; .aEdge [i] .colorB=this.aEdge [i] .Color.B; .aEdge [i] .deleted=this.aEdge [i] .Deleted; .aEdge [i]. description=this.aEdge [i] .Description; .aEdge [i] .enabled=this.aEdge [i] .Enabled; .aEdge [i] .selected=this.aEdge [i] .Selected; .aEdge [i].title=this.aEdge [i] .Title; .aEdge [i] .visible=this.aEdge [i] .Visible; .aEdge [i] .srcvertex=this.aEdge [i] .srcVertex; .aEdge [i ] .destvertex=this.aEdge [i] .destVertex; .aEdge [i] .weight=this.aEdge [i] .Weight;
}
//і не забути зберегти ширину і висоту транспортної мережі
tns.width=this.Width; .height=this.Height;
}
ДОДАТОК Е
Опції для здійснення пошуку в глибину
//багатопотоковий пошук в шірінуvoid tbfs (object p)
{_ count ++;// збільшуємо кількість запущених потоковt=(ptbfs) p; .current_pathV.Push (t.start);// в стеку лежить шлях, а шлях ми починаємо з
стартовою вершіниv;// номер поточної вершини=t.current_pathV.Peek ();// дізнаємося номер поточної вершини (v == t.finish)
{
//якщо дійшли до фінальної вершини
lock (locker)
{(t.current_weight lt; best_weight)
{_ weight=t.current_weight; _path=new Stack lt; int gt; (t.current_pathV); _ pathE=new Stack lt; int gt; (t.current_pathE);
}
}
//якщо дійшли до фінальної вершини
}
{
//якщо ж ми не дійшли ще до фінальної вершини
//йти з цієї вершини в усі інші по черзі
foreach (int iE in tn.aVertex [v] .iEdge)
{vv;// один з варіантів, куди можна піти
if (tn.aEdge [iE] .srcVertex == v)=tn.aEdge [iE] .destVertex;=tn.aEdge [iE] .srcVertex;
if (t.current_pathV.Contains (vv) == true)//туди йти не можна, ми там вже
були;// і далі можна цю вершину не обраховують (tn.aVertex [vv] .Enabled == false)//в неї йти не можна, вона
заблокована;// і далі можна цю вершину не обраховують (tn.aEdge [iE] .Enabled == false)//по цьому ребру йти не можна, воно
заблоковане;// і далі можна цю вершин не обсчітиватьw=tn.aEdge [iE] .Weight;// вага того ребра по якому ми можемо
піти
lock (locker)
{(t.current_weight + w gt; best_weight)//є легші шляхи
continue;// і далі можна цю вершину не обраховують
} tr;// чи потрібна пересадка для потрапляння в наступну
//вона потрібна якщо вершини належать різним транспортним мережам
if (tn.aVertex [v] .iGraph!=tn.aVertex [vv] .iGraph)=1;=0; (t.current_transfer + tr gt; numericUpDownTransfer.Value)//є більш
короткі шляхи
continue;// і далі можна цю вершину не обраховують
ptbfs tt=new ptbfs () ;. current_pathV=new Stack lt; int gt; (t.current_pathV) ;. current_pathE=new Stack lt; int gt; (t.current_pathE);
//йти в цю вершину
//tt.current_pathV.Push (vv);// покласти в стек вершіну.current_pathE.Push (iE);// покласти в стек ребро
//йти в цю вершину
//перерахувати показники
tt.curren...