You are viewing a single comment's thread. Return to all comments →
C# .NET Solution:
Be sure to change the boilerplate code to this:
long[] ids = Array.ConvertAll(Console.ReadLine().Trim().Split(' '), idsTemp => Convert.ToInt64(idsTemp)) ;
Solution code:
static int findShortest(int graphNodes, int[] graphFrom, int[] graphTo, long[] ids, int val) { // solve here Dictionary<int, HashSet<int>> Adj = new Dictionary<int, HashSet<int>>(); for(int i=1; i <= graphNodes; i++) Adj[i] = new HashSet<int>(); for(int i=0; i<graphFrom.Length; i++) { Adj[graphFrom[i]].Add(graphTo[i]); Adj[graphTo[i]].Add(graphFrom[i]); } HashSet<int> requiredNodes = new HashSet<int>(); Dictionary<int, int> distanceTo = new Dictionary<int, int>(); for(int i=1; i<=graphNodes; i++) if(ids[i-1] == val) requiredNodes.Add(i); Queue<int> q; int minimumDistance = int.MaxValue; int distance; foreach(int node in requiredNodes) { q = new Queue<int>(); distanceTo = new Dictionary<int, int>(); distance = 1; q.Enqueue(node); distanceTo[node] = 0; while(q.Count != 0) { int cur = q.Dequeue(); foreach(int n in Adj[cur]) { if(!distanceTo.ContainsKey(n)) { q.Enqueue(n); distanceTo[n] = distance; } } distance++; foreach(var n in requiredNodes.Where(a => a != cur && a != node)) if(distanceTo.ContainsKey(n)) if(distanceTo[n]<minimumDistance) minimumDistance = distanceTo[n]; } } if(minimumDistance == int.MaxValue) return -1; else return minimumDistance; }
Seems like cookies are disabled on this browser, please enable them to open this website
Find the nearest clone
You are viewing a single comment's thread. Return to all comments →
C# .NET Solution:
Be sure to change the boilerplate code to this:
Solution code: