public static Graph <int> FromFile(string path, bool isDirected)
        {
            var g = new Graph <int>();

            using (var stream = File.OpenRead(path))
            {
                using (var reader = new StreamReader(stream))
                {
                    string line;
                    while ((line = reader.ReadLine()) != null)
                    {
                        var vertices = line.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);
                        if (vertices.Any())
                        {
                            var v = g.GetOrCreateVertex(int.Parse(vertices[0]));
                            foreach (var adj in vertices.Skip(1))
                            {
                                var tokens = adj.Split(',');
                                if (tokens.Length == 2)
                                {
                                    int i2     = int.Parse(tokens[0]);
                                    int weight = int.Parse(tokens[1]);
                                    var v2     = g.GetOrCreateVertex(i2);
                                    v.AddEdge(v2.Key, weight);
                                }
                            }
                        }
                    }
                }
            }
            g.IsDirected = isDirected;
            return(g);
        }
 public static Graph<int> FromFile(string path, bool isDirected)
 {
     var g = new Graph<int>();
     using (var stream = File.OpenRead(path))
     {
         using (var reader = new StreamReader(stream))
         {
             string line;
             while ((line = reader.ReadLine() ) != null)
             {
                 var vertices = line.Split(new[] {' ', '\t'}, StringSplitOptions.RemoveEmptyEntries);
                 if (vertices.Any())
                 {
                     var v = g.GetOrCreateVertex(int.Parse(vertices[0]));
                     foreach (var adj in vertices.Skip(1))
                     {
                         var tokens = adj.Split(',');
                         if (tokens.Length == 2)
                         {
                             int i2 = int.Parse(tokens[0]);
                             int weight = int.Parse(tokens[1]);
                             var v2 = g.GetOrCreateVertex(i2);
                             v.AddEdge(v2.Key, weight);
                         }
                     }
                 }
             }
         }
     }
     g.IsDirected = isDirected;
     return g;
 }
        public void TestSmallGraph()
        {
            var g = new Graph<int>();
            for (int i = 0; i < 4; ++i) g.GetOrCreateVertex(i);

            g.Get(0).AddEdge(1, 1);
            g.Get(0).AddEdge(2, 3);
            g.Get(1).AddEdge(2, 1);
            g.Get(1).AddEdge(3, 3);
            g.Get(2).AddEdge(3, 1);

            var algorithm = new Dijkstra<int>(g, 0);
            algorithm.Run();

            Assert.AreEqual(0, g.Get(0).Score);
            Assert.AreEqual(1, g.Get(1).Score);
            Assert.AreEqual(2, g.Get(2).Score);
            Assert.AreEqual(3, g.Get(3).Score);
        }
예제 #4
0
        public void TestSmallGraph()
        {
            var g = new Graph <int>();

            for (int i = 0; i < 4; ++i)
            {
                g.GetOrCreateVertex(i);
            }

            g.Get(0).AddEdge(1, 1);
            g.Get(0).AddEdge(2, 3);
            g.Get(1).AddEdge(2, 1);
            g.Get(1).AddEdge(3, 3);
            g.Get(2).AddEdge(3, 1);

            var algorithm = new Dijkstra <int>(g, 0);

            algorithm.Run();

            Assert.AreEqual(0, g.Get(0).Score);
            Assert.AreEqual(1, g.Get(1).Score);
            Assert.AreEqual(2, g.Get(2).Score);
            Assert.AreEqual(3, g.Get(3).Score);
        }