private Graph <int> MapToGraph(MatrixInfoDto matrixInfo) { var nodesMap = matrixInfo.Indexes.ToDictionary(k => k, v => v); var graph = new Graph <int>(); graph.AddNodes(matrixInfo.Indexes); for (int i = 0; i < matrixInfo.TotalRows; i++) { for (int j = 0; j < matrixInfo.TotalColumns; j++) { var index = GetIndex(i, j, matrixInfo.TotalColumns); if (nodesMap.ContainsKey(index)) { var neighborCandidates = GetNeighborCandidates(index, matrixInfo.TotalRows, matrixInfo.TotalColumns); foreach (var neighbor in neighborCandidates) { if (nodesMap.ContainsKey(neighbor.Index)) { graph.AddEdge(index, neighbor.Index); } } } } } return(graph); }
public async Task <IActionResult> Solve([FromBody] MatrixInfoDto matrixInfo) { try { var graph = MapToGraph(matrixInfo); var retValue = await Task.Run(() => graph.GetConnectedComponents()); return(Ok(retValue)); } catch (Exception ex) { return(BadRequest($"Unable to calculate components: {ex.Message}")); } }