}
if (distanceList.Count == 0)
return false;
for (int i=0; i lt; distanceList.Count; i ++)
{
NodesDistanceEntry nde=distanceList [i];
if (maxDistanceLength lt; nde.pathLength)
{
maxDistanceLength=nde.pathLength;
maxDistanceInd=i;
}
}
return true;
}
public void Draw (ref Graphics g)
{
Pen pen=new Pen (Color.Black, 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 ());
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 (maxDistanceInd!=- 1)
{
if (distanceList [maxDistanceInd] .node1!=i amp; amp; distanceList [maxDistanceInd] .node2!=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.FOUND;
}
else
{
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;
}
}
}
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.FOUND:
g.DrawImage (imgFoundNode, 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);
}
}
}
2.7 Графічний інтерфейс
Для реалізації графічного інтерфейсу були використані стандартні засоби візуального проектування інтерфейсу середовища розробки Microsoft Visual Studio 2012. Графічний інтерфейс являє собою форму (System.Windows.Forms.Form) на якій розташовані рядок меню і командна панель. На командній панелі розташовані елементи управління RadioButton для вибору режиму редагування графа і кнопки, необхідні для пошуку шляху.
Граф відображається на формі за допомогою події Paint. Червоним кольором позначені вершини, що не мають жодного ребра (не пов'язані з іншими вершинами). Зеленим кольором позначаються вершини, пов'язані хоча б з однією іншою вершиною. На командній панелі є вибір різних режимів редагування графа: