public void AdjacencyList_Filter_SelectesPartOfVertices() { int vertex1 = 10; int vertex2 = 20; int vertex3 = 30; int vertex4 = 40; string edge1 = "20-30"; string edge2 = "30-40"; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); adjacencyList.AddVertex(vertex1); adjacencyList.AddVertex(vertex2); adjacencyList.AddVertex(vertex3); adjacencyList.AddVertex(vertex4); adjacencyList.AddEdge(vertex2, vertex3, edge1); adjacencyList.AddEdge(vertex3, vertex4, edge2); IGraph <int, string> filtered = adjacencyList.Filter((v1, v2, ed) => v1 == 20); Assert.Equal(2, filtered.NumVertices); Assert.True(filtered.HasVertex(vertex2)); Assert.True(filtered.HasVertex(vertex3)); Assert.Equal(edge1, filtered.FindEdge(vertex2, vertex3)); }
public void ShortestPathSearcher_Integration_CumulativeWeight() { string vertexA = "A", vertexB = "B", vertexC = "C"; // Graph A-B=2, A-C=3, B-C=4 AdjacencyList <string, int> graph = new AdjacencyList <string, int>(); graph.AddVertex(vertexA); graph.AddVertex(vertexB); graph.AddVertex(vertexC); graph.AddEdge(vertexA, vertexB, 2); graph.AddEdge(vertexA, vertexC, 3); graph.AddEdge(vertexB, vertexC, 4); ShortestPathSearcher <string, int> searcher = new ShortestPathSearcher <string, int>(graph, vertexB, vertexC, (i) => i) { PathWeightCalculation = PathWeightCalculationType.Cumulative }; IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath(); Assert.IsNotNull(path); Assert.AreEqual(2, path.Count()); EdgeDescriptor <string, int> edge1 = path.First(); Assert.AreEqual("A", edge1.Vertex1); Assert.AreEqual("B", edge1.Vertex2); Assert.AreEqual(2, edge1.Edge); EdgeDescriptor <string, int> edge2 = path.Last(); Assert.AreEqual("A", edge2.Vertex1); Assert.AreEqual("C", edge2.Vertex2); Assert.AreEqual(3, edge2.Edge); }
public void AdjacencyList_RemoveVertex_RemovesVerticesWithEdges() { int vertex1 = 10; int vertex2 = 20; int vertex3 = 30; int vertex4 = 40; string edge1 = "20-30"; string edge2 = "30-40"; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); adjacencyList.AddVertex(vertex1); adjacencyList.AddVertex(vertex2); adjacencyList.AddVertex(vertex3); adjacencyList.AddVertex(vertex4); adjacencyList.AddEdge(vertex2, vertex3, edge1); adjacencyList.AddEdge(vertex3, vertex4, edge2); Assert.Equal(4, adjacencyList.NumVertices); Assert.Equal(edge1, adjacencyList.FindEdge(vertex2, vertex3)); Assert.Equal(edge2, adjacencyList.FindEdge(vertex3, vertex4)); adjacencyList.RemoveVertex(vertex2); Assert.Equal(3, adjacencyList.NumVertices); Assert.Equal(edge2, adjacencyList.FindEdge(vertex3, vertex4)); }
public void ShortestPathSearcher_Integration_DefaultAggregativeWeight() { string vertexA = "A", vertexB = "B", vertexC = "C", vertexD = "D"; // Graph A-B, A-C, B-D, B-A AdjacencyList <string, int> graph = new AdjacencyList <string, int>(); graph.AddVertex(vertexA); graph.AddVertex(vertexB); graph.AddVertex(vertexC); graph.AddVertex(vertexD); graph.AddEdge(vertexA, vertexB, 10); graph.AddEdge(vertexB, vertexA, 5); graph.AddEdge(vertexA, vertexC, 20); graph.AddEdge(vertexB, vertexD, 10); ShortestPathSearcher <string, int> searcher = new ShortestPathSearcher <string, int>(graph, vertexA, vertexD, (i) => i); IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath(); Assert.IsNotNull(path); Assert.AreEqual(2, path.Count()); EdgeDescriptor <string, int> firstDesc = path.First(); Assert.AreEqual("B", firstDesc.Vertex1); Assert.AreEqual("A", firstDesc.Vertex2); Assert.AreEqual(5, firstDesc.Edge); EdgeDescriptor <string, int> lastDesc = path.Last(); Assert.AreEqual("B", lastDesc.Vertex1); Assert.AreEqual("D", lastDesc.Vertex2); Assert.AreEqual(10, lastDesc.Edge); }
public void AdjacencyList_AddVertex_DeclinesAddingDuplicatedVertices() { int vertex1 = 10; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); adjacencyList.AddVertex(vertex1); adjacencyList.AddVertex(vertex1); }
public void AdjacencyList_AddVertex_DeclinesAddingDuplicatedVertices() { int vertex1 = 10; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); adjacencyList.AddVertex(vertex1); var exception = Assert.Throws <InvalidOperationException>(() => adjacencyList.AddVertex(vertex1)); Assert.Equal("Duplicated vertex '10'", exception.Message); }
public void AdjacencyList_AddVertex_AddsANewUniqueVertex() { int vertex1 = 10; int vertex2 = 20; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); adjacencyList.AddVertex(vertex1); adjacencyList.AddVertex(vertex2); Assert.Equal(2, adjacencyList.NumVertices); Assert.True(adjacencyList.HasVertex(vertex1)); Assert.True(adjacencyList.HasVertex(vertex2)); }
public void GraphExtensions_GetOrderedVertices_ReturnsOrderedVertixDescriptors() { IGraph <string, string> graph = new AdjacencyList <string, string>(); graph.AddVertex("BBB"); graph.AddVertex("AAA"); graph.AddVertex("ABA"); graph.AddVertex("BAB"); var vertices = graph.GetOrderedVertices(StringComparer.CurrentCulture); Assert.Equal("AAA", vertices.ElementAt(0).Vertex); Assert.Equal("ABA", vertices.ElementAt(1).Vertex); Assert.Equal("BAB", vertices.ElementAt(2).Vertex); Assert.Equal("BBB", vertices.ElementAt(3).Vertex); }
public void AdjacencyList_NumVertices_ReturnsNumberOfVertices() { int vertex1 = 10; int vertex2 = 20; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); Assert.Equal(0, adjacencyList.NumVertices); adjacencyList.AddVertex(vertex1); Assert.Equal(1, adjacencyList.NumVertices); adjacencyList.AddVertex(vertex2); Assert.Equal(2, adjacencyList.NumVertices); adjacencyList.RemoveVertex(vertex2); Assert.Equal(1, adjacencyList.NumVertices); }
public void AdjacencyList_FindEdge_LooksForEdgesByVertices() { int vertex1 = 10; int vertex2 = 20; int vertex3 = 30; int vertex4 = 40; string edge1 = "20-30"; string edge2 = "30-40"; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); adjacencyList.AddVertex(vertex1); adjacencyList.AddVertex(vertex2); adjacencyList.AddVertex(vertex3); adjacencyList.AddVertex(vertex4); adjacencyList.AddEdge(vertex2, vertex3, edge1); adjacencyList.AddEdge(vertex3, vertex4, edge2); Assert.Equal(edge1, adjacencyList.FindEdge(vertex2, vertex3)); Assert.Equal(edge2, adjacencyList.FindEdge(vertex3, vertex4)); }
public void AdjacencyList_HasVertex_ChecksWhetherVertexExists() { int vertex1 = 10; int vertex2 = 20; AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>(); Assert.False(adjacencyList.HasVertex(vertex1)); Assert.False(adjacencyList.HasVertex(vertex2)); adjacencyList.AddVertex(vertex1); Assert.True(adjacencyList.HasVertex(vertex1)); Assert.False(adjacencyList.HasVertex(vertex2)); adjacencyList.AddVertex(vertex2); Assert.True(adjacencyList.HasVertex(vertex1)); Assert.True(adjacencyList.HasVertex(vertex2)); adjacencyList.RemoveVertex(vertex2); Assert.True(adjacencyList.HasVertex(vertex1)); Assert.False(adjacencyList.HasVertex(vertex2)); }
public void GraphExtensions_GetOrderedEdges_ReturnsOrderedEdgeDescriptors() { IGraph <string, string> graph = new AdjacencyList <string, string>(); graph.AddVertex("BBB"); graph.AddVertex("AAA"); graph.AddVertex("ABA"); graph.AddVertex("BAB"); graph.AddEdge("ABA", "BBB", "aba-bbb"); graph.AddEdge("ABA", "AAA", "aba-aaa"); graph.AddEdge("ABA", "BAB", "aba-bab"); // Those opposite edges will be ignored graph.AddEdge("AAA", "ABA", "aaa-aba"); graph.AddEdge("BBB", "ABA", "bbb-aba"); var edges = graph.FindVertexDescriptor("ABA").GetOrderedEdges(StringComparer.CurrentCulture); Assert.Equal(3, edges.Count()); Assert.Equal("AAA", edges.ElementAt(0).Vertex2); Assert.Equal("BAB", edges.ElementAt(1).Vertex2); Assert.Equal("BBB", edges.ElementAt(2).Vertex2); }
private void MouseClickDrawForm(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { VertexDraw vertexDraw = new VertexDraw(BrushColor.Orange, BrushColor.Green , e.X - (int)VertexParameters.Radius, e.Y - (int)VertexParameters.Radius , (int)VertexParameters.Width, (int)VertexParameters.Height, "Саси" , vertexDraws.Count); if ((collisionVertex.IsDrawVertex(vertexDraw, vertexDraws)) && (startVertexId != -1)) { vertexDraw.VertexMove(vertexDraws, ref startVertexId , e.X - (int)VertexParameters.Radius, e.Y - (int)VertexParameters.Radius); Refresh(); } else if (collisionVertex.IsDrawVertex(vertexDraw, vertexDraws)) { adjacencyList.AddVertex(new CraphModel.Vertex { Id = vertexDraws.Count, Nodes = new List <CraphModel.Node>() }); adListPanel.UpdateIdPanel(); vertexDraws.Add(vertexDraw); matrixWeightPanel.ExpandMatrix(1); Refresh(); } else { drawingEdges.VertexFind(newEdgeDefinition, e, vertexDraws, edgeDraws, ref startVertexId, ref endVertexId, ref adjacencyList, adListPanel, matrixWeightPanel); Refresh(); } if (DialogResult == DialogResult.Cancel) { Application.Exit(); } } }
void randomlyPlaceNodes() //also adds vertexes to adjacencylist { int numNodes = masterNodeList.Length; // add nodes for (int i = 0; i < numNodes; i++) { // add vertexes if (i != 0) { adjacencyList.AddVertex(i); } GameObject myNodeInstance = Instantiate(Resources.Load("Node"), new Vector3(Random.Range(-NODE_SPREAD, NODE_SPREAD), Random.Range(-NODE_SPREAD, NODE_SPREAD) + 5.0f, Random.Range(-NODE_SPREAD, NODE_SPREAD) + DISTANCE_FROM_FACE), Quaternion.identity) as GameObject; masterNodeList [i] = new Node(myNodeInstance, i); } }
protected void LoadInput() { //first ensure all the dict are initialized foreach (var node in _nodes) { _adjacencyList.AddVertex(node); } //make a link between nodes that have summed values that mod 3 are equals to 0 foreach (var node in _nodes) { foreach (var innerNode in _nodes) { //when node + innerNode is divisible by three add a link between them //e.g. 1 will have edges with 2 and 5 if ((node + innerNode) % 3 != 0 || node == innerNode) { continue; } _adjacencyList.AddEdge(node, innerNode); _adjacencyList.AddEdge(innerNode, node); } } }
public CityUtil() { city_dict.Add(0, "沈阳"); city_dict.Add(1, "北京"); city_dict.Add(2, "天津"); city_dict.Add(3, "石家庄"); city_dict.Add(4, "济南"); city_dict.Add(5, "郑州"); city_dict.Add(6, "南京"); city_dict.Add(7, "杭州"); city_dict.Add(8, "上海"); city_dict.Add(9, "合肥"); city_list.AddVertex("沈阳"); city_list.AddVertex("北京"); city_list.AddVertex("天津"); city_list.AddVertex("石家庄"); city_list.AddVertex("济南"); city_list.AddVertex("郑州"); city_list.AddVertex("南京"); city_list.AddVertex("杭州"); city_list.AddVertex("上海"); city_list.AddVertex("合肥"); city_list.AddEdge("合肥", "杭州"); city_mapping_list[0] = new CityMapping(0, "合肥", "杭州"); city_list.AddEdge("合肥", "郑州"); city_mapping_list[1] = new CityMapping(1, "合肥", "郑州"); city_list.AddEdge("杭州", "郑州"); city_mapping_list[2] = new CityMapping(2, "杭州", "郑州"); city_list.AddEdge("杭州", "南京"); city_mapping_list[3] = new CityMapping(3, "杭州", "南京"); city_list.AddEdge("杭州", "上海"); city_mapping_list[4] = new CityMapping(4, "杭州", "上海"); city_list.AddEdge("郑州", "南京"); city_mapping_list[5] = new CityMapping(5, "郑州", "南京"); city_list.AddEdge("郑州", "石家庄"); city_mapping_list[6] = new CityMapping(6, "郑州", "石家庄"); city_list.AddEdge("南京", "石家庄"); city_mapping_list[7] = new CityMapping(7, "南京", "石家庄"); city_list.AddEdge("南京", "天津"); city_mapping_list[8] = new CityMapping(8, "南京", "天津"); city_list.AddEdge("南京", "济南"); city_mapping_list[9] = new CityMapping(9, "南京", "济南"); city_list.AddEdge("南京", "上海"); city_mapping_list[10] = new CityMapping(10, "南京", "上海"); city_list.AddEdge("上海", "济南"); city_mapping_list[11] = new CityMapping(11, "上海", "济南"); city_list.AddEdge("石家庄", "济南"); city_mapping_list[12] = new CityMapping(12, "石家庄", "济南"); city_list.AddEdge("石家庄", "北京"); city_mapping_list[13] = new CityMapping(13, "石家庄", "北京"); city_list.AddEdge("济南", "天津"); city_mapping_list[14] = new CityMapping(14, "济南", "天津"); city_list.AddEdge("北京", "沈阳"); city_mapping_list[15] = new CityMapping(15, "北京", "沈阳"); city_list.AddEdge("天津", "沈阳"); city_mapping_list[16] = new CityMapping(16, "天津", "沈阳"); city_list.AddEdge("合肥", "济南"); city_mapping_list[17] = new CityMapping(17, "合肥", "济南"); city_list.AddEdge("郑州", "济南"); city_mapping_list[18] = new CityMapping(18, "郑州", "济南"); city_tikcet_mapping["上海"] = new List <string>(); city_tikcet_mapping["上海"].Add("杭州"); city_tikcet_mapping["杭州"] = new List <String>(); city_tikcet_mapping["杭州"].Add("南京"); city_tikcet_mapping["南京"] = new List <string>(); city_tikcet_mapping["南京"].Add("合肥"); city_tikcet_mapping["南京"].Add("郑州"); city_tikcet_mapping["合肥"] = new List <String>(); city_tikcet_mapping["合肥"].Add("郑州"); city_tikcet_mapping["合肥"].Add("济南"); city_tikcet_mapping["郑州"] = new List <String>(); city_tikcet_mapping["郑州"].Add("石家庄"); city_tikcet_mapping["郑州"].Add("济南"); city_tikcet_mapping["济南"] = new List <String>(); city_tikcet_mapping["济南"].Add("石家庄"); city_tikcet_mapping["济南"].Add("天津"); city_tikcet_mapping["石家庄"] = new List <String>(); city_tikcet_mapping["石家庄"].Add("北京"); city_tikcet_mapping["北京"] = new List <String>(); city_tikcet_mapping["北京"].Add("沈阳"); city_tikcet_mapping["天津"] = new List <String>(); city_tikcet_mapping["天津"].Add("北京"); city_tikcet_mapping["天津"].Add("沈阳"); }
public void AddVertexTest_AddExistVertex_ExceptionExpected() { var ex = Assert.Throws <System.Exception>(() => adList.AddVertex(vertex)); Assert.AreEqual(ex.Message, "This vertex is already in the list of adjacencies"); }
void parseGraph(string nodeAsset, int dimensionality, int type) { TextAsset positionsText = Resources.Load(nodeAsset) as TextAsset; string[,] myPositionsGrid = CSVReader.SplitCsvGrid(positionsText.text); int numberOfNodes = myPositionsGrid.GetUpperBound(1) - 1; masterNodeList = new Node[numberOfNodes]; indicesToShowOrExplode = new int[numberOfNodes]; // add nodes for (int i = 1; (i < numberOfNodes + 1); i++) { if (i != 0) { adjacencyList.AddVertex(i); } Vector3 position; int startIndexCoordinates; if (type == DATA_MNIST) { startIndexCoordinates = 3; } else { startIndexCoordinates = 8; } float x_3d = float.Parse(myPositionsGrid[startIndexCoordinates, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER; float y_3d = float.Parse(myPositionsGrid[startIndexCoordinates + 1, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER; float z_3d = float.Parse(myPositionsGrid[startIndexCoordinates + 2, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER; float x_2d = float.Parse(myPositionsGrid[startIndexCoordinates + 3, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER; float y_2d = float.Parse(myPositionsGrid[startIndexCoordinates + 4, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER; if (dimensionality == GRAPH_3D) { position = new Vector3( x_3d, y_3d, z_3d ); } else { position = new Vector3( x_2d, y_3d, 0.0f ); } string label = myPositionsGrid[0, i]; GameObject myNodeInstance = Instantiate(Resources.Load("Node") as GameObject, position, Quaternion.identity) as GameObject; //don't do getcomp live LayerSelfBasedOnRelativeLocations layerScript = myNodeInstance.GetComponent <LayerSelfBasedOnRelativeLocations>(); layerScript.eagleEyeCamera = eagleEyeCamera; layerScript.headsetLocation = playerCamera; NodeForce nodeScript = myNodeInstance.GetComponent <NodeForce>(); nodeScript.x_3d = x_3d; nodeScript.y_3d = y_3d; nodeScript.z_3d = z_3d; nodeScript.x_2d = x_2d; nodeScript.y_2d = y_2d; nodeScript.SetText(myPositionsGrid[1, i]); nodeScript.degree = int.Parse(myPositionsGrid[2, i]); nodeScript.SetScaleFromDegree(nodeScript.degree); masterNodeList[i - 1] = new Node(myNodeInstance, i - 1); if (type == DATA_TWITTER) { masterNodeList[i - 1].nodeForce.group = int.Parse(myPositionsGrid[3, i]); masterNodeList[i - 1].nodeForce.followerCount = (int)float.Parse(myPositionsGrid[4, i]); } else if (type == DATA_MNIST) { masterNodeList[i - 1].nodeForce.group = (int)float.Parse(myPositionsGrid[1, i]); } NodeGroup nodeGroupWrapperObject; // if this is a new key, make a new group if (!nodeGroups.ContainsKey(masterNodeList[i - 1].nodeForce.group)) { GameObject nodeGroupObject = Instantiate(Resources.Load("NodeGroupContainer") as GameObject, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity) as GameObject; nodeGroupWrapperObject = new NodeGroup(nodeGroupObject); nodeGroupWrapperObject.nodeGroupContainerScript.groupNumber = masterNodeList[i - 1].nodeForce.group; nodeGroupWrapperObject.gameObject.transform.parent = nodeContainer.transform; nodeGroups.Add( masterNodeList[i - 1].nodeForce.group, nodeGroupWrapperObject ); } else // give access to the existing group { nodeGroupWrapperObject = nodeGroups[masterNodeList[i - 1].nodeForce.group]; } masterNodeList[i - 1].nodeForce.SetColorByGroup(masterNodeList[i - 1].nodeForce.group); masterNodeList[i - 1].gameObject.transform.parent = nodeGroupWrapperObject.gameObject.transform; // not sure if this is gonna work right, off the bat // populate an array for the mnist image if (type == DATA_MNIST) { for (int q = 0; q < MNIST_IMAGE_SIZE; q++) { for (int r = 0; r < MNIST_IMAGE_SIZE; r++) { //print("q: " + q + "... r: " + r); masterNodeList[i - 1].nodeForce.image[q, r] = float.Parse(myPositionsGrid[startIndexCoordinates + 5 + q * MNIST_IMAGE_SIZE + r, i]); } } } nameToID.Add(label, i - 1); } }
public Vertex AddVertex(string id) => adjacencyList.AddVertex(id);
protected override int AddVertex(AdjacencyList <string, int> graph, string label) { return(graph.AddVertex(label)); }
/// <summary> /// Add a vertex to the network. /// </summary> public int AddVertex() { return(_adjacencyList.AddVertex()); }