public void TestUndirectedGraph() { IVertexList <Vertex> vertices = new VertexList <Vertex>(); IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> > edges = new UndirectedAdjacencyList <int, Vertex, Edge <Vertex> >(); IUndirectedGraph <IVertexList <Vertex>, int, Vertex, IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> >, Edge <Vertex> > graph = new UndirectedGraph <IVertexList <Vertex>, int, Vertex, IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> >, Edge <Vertex> >(vertices, edges); Assert.IsNotNull(graph.EdgeSet); Assert.IsNotNull(graph.VertexSet); Assert.IsNotNull(((IMutableGraph <VertexList <Vertex>, int, Vertex, IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> >, Edge <Vertex> >)graph).EdgeSet); Assert.IsNotNull(((IMutableGraph <VertexList <Vertex>, int, Vertex, IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> >, Edge <Vertex> >)graph).VertexSet); Assert.IsNotNull(((IReadonlyGraph <VertexList <Vertex>, int, Vertex, IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> >, Edge <Vertex> >)graph).EdgeSet); Assert.IsNotNull(((IReadonlyGraph <VertexList <Vertex>, int, Vertex, IUndirectedAdjacencyList <int, Vertex, Edge <Vertex> >, Edge <Vertex> >)graph).VertexSet); }
public static AdjacencyList ReadGraph(string filepath) { StreamReader reader = new StreamReader(filepath); int no_of_node = -1; int no_of_edge = -1; bool directed = false; while (!reader.EndOfStream) { string[] record = reader.ReadLine().Split(' '); // 1フィールド目が属性 switch (record[0]) { case "TYPE": directed = record[2] == "DIRECTED"; break; case "NO_OF_NODE": no_of_node = int.Parse(record[2]); break; case "NO_OF_EDGE": no_of_edge = int.Parse(record[2]); break; case "EDGE_CODE_SECTION": goto READ_EDGE_DATA; } } // エッジデータの読み込み READ_EDGE_DATA: if (no_of_node == -1) { Common.ErrorExit("ノード数の指定がありません。"); } if (no_of_edge == -1) { Common.ErrorExit("エッジ数の指定がありません。"); } int[][] edge_list = new int[no_of_edge][]; for (int i = 0; i < no_of_edge; i++) { if (reader.EndOfStream) { Common.ErrorExit("NO_OF_EDGEで指定されたエッジ数よりも少ないデータが記載されています。"); } string[] record = reader.ReadLine().Split(' '); edge_list[i] = new int[2]; edge_list[i][0] = int.Parse(record[0]); edge_list[i][1] = int.Parse(record[1]); } if (!reader.EndOfStream) { Common.ErrorExit("NO_OF_EDGEで指定されたエッジ数よりも多いデータが記載されています。"); } AdjacencyList instance; if (directed) { instance = new DirectedAdjacencyList(no_of_node, no_of_edge, edge_list); } else { instance = new UndirectedAdjacencyList(no_of_node, no_of_edge, edge_list); } return(instance); }