> w.Write (edges.Count);
for (int i=0; i lt; nodes.Count; i ++)
{
w.Write (nodes [i] .isExists ());
w.Write (nodes [i] .GetPositionX ());
w.Write (nodes [i] .GetPositionY ());
}
for (int i=0; i lt; edges.Count; i ++)
{
int node1, node2;
edges [i] .GetLinkedNodes (out node1, out node2);
w.Write (node1);
w.Write (node2);
}
w.Flush ();
w.Close ();
}
2.6 Методи класу GraphMaxDistanceFinder
. У конструктор класу передається посилання на граф, в якому необхідно проводити пошук шляху, а також, ім'я файлу, що зберігає зображення вершини, яка входить в знайдений шлях:
public GraphPathFinder (ref Graph _graph, string pathNodeImage)
{
graph=_graph;
imgPathNode=Image.FromFile (pathNodeImage);
}
. Метод Draw служить для графічного відображення графа зі знайденим маршрутом на заданому графічному контексті (Даний метод використовується замість методу Draw класу Graph:
public void Draw (ref Graphics g)
{
Pen pen;
Pen normalPen=new Pen (Color.Black, 5);
Pen linkedPen=new Pen (Color.Red, 5);
for (int i=0; i lt; graph.edges.Count; i ++)
{
Point xFrom, xTo;
int node1, node2;
graph.edges [i] .GetLinkedNodes (out node1, out node2);
xFrom=new Point (graph.nodes [node1] .GetPositionX (), graph.nodes [node1] .GetPositionY ());
xTo=new Point (graph.nodes [node2] .GetPositionX (), graph.nodes [node2] .GetPositionY ());
pen=normalPen;
if (pathNodes.Contains (node1) amp; amp; pathNodes.Contains (node2))
pen=linkedPen;
g.DrawLine (pen, xFrom, xTo);
}
for (int i=0; i lt; graph.nodes.Count; i ++)
{
GraphNode node=graph.nodes [i];
if (node.isExists ())
{
NODE_TYPE nodeType=NODE_TYPE.NOT_CONNECTED;// 0 - Not connected, 1 - OK node, 2 - Path node
if (! pathNodes.Contains (i))
foreach (GraphEdge edge in graph.edges)
{
int node1, node2;
edge.GetLinkedNodes (out node1, out node2);
if (node1 == i || node2 == i)
{
nodeType=NODE_TYPE.OK;
break;
}
}
else
nodeType=NODE_TYPE.PATH;
switch (nodeType)
{
case NODE_TYPE.NOT_CONNECTED:
g.DrawImage (graph.imgNode, node.GetPositionX () - graph.imageCenter, node.GetPositionY () - graph.imageCenter);
break;
case NODE_TYPE.OK:
g.DrawImage (graph.imgOkNode, node.GetPositionX () - graph.imageCenter, node.GetPositionY () - graph.imageCenter);
break;
case NODE_TYPE.PATH:
g.DrawImage (imgPathNode, node.GetPositionX () - graph.imageCenter, node.GetPositionY () - graph.imageCenter);
break;
default:
g.DrawImage (graph.imgNode, node.GetPositionX () - graph.imageCenter, node.GetPositionY () - graph.imageCenter);
break;
g.DrawString ((i + 1) .ToString (), graph.font, Brushes.Black, node.GetPositionX () - 12, node.GetPositionY () - 12);
3. Метод GraphPathFinder
namespace Graphs
{
public enum NODE_TYPE
{
NOT_CONNECTED=0,
OK=1,
PATH=2,
FOUND=3,
}
class GraphPathFinder