// ********************************************************************* // Wczytuje graf z tablicy (wiersze: start, end, weight). // Wyrzuca IncorrectGraphException w przypadku, gdy tablica zawiera // nieprawidlowe informacje, w innym przypadku zwraca liste sasiedztwa. // ********************************************************************* public static int[][][] Load(int[][] graph) { if (graph == null || graph.Length < 2) { throw new IncorrectGraphException(); } int maxVertex = graph.Max(i => Math.Max(i[0], i[1])); List <int[]>[] edges = new List <int[]> [maxVertex + 1]; for (int i = 0; i < edges.Length; i++) { edges[i] = new List <int[]>(); } foreach (int[] edge in graph) { if (edge == null || edge.Length != 3 || edge[0] < 0 || edge[1] < 0 || edge[2] <= 0) { throw new IncorrectGraphException(); } ListGraphGenerator.InsertConnection( edges, edge[0], edge[1], edge[2]); } return(edges.Select(e => e.ToArray()).ToArray()); }
// ********************************************************************* // Wczytuje graf z podanej tablicy krawedzi i zwraca liste sasiedztwa. // Wyrzuca IncorrectGraphException w przypadku, gdy tablica zawiera // nieprawidlowe informacje. // ********************************************************************* public static int[][][] Load(Edge[] edges) { if (!ListGraphValidator.ValidateEdges(edges)) { throw new IncorrectGraphException(); } // Znalezienie maksymalnego wierzcholka maxVertex: int maxVertex = edges.Max(e => Math.Max(e.Start, e.End)); // Utworzenie listy sasiedztwa i zainicjowanie jej: List <int[]>[] graph = new List <int[]> [maxVertex + 1]; for (int i = 0; i < graph.Length; i++) { graph[i] = new List <int[]>(); } // Dodanie do listy przekazanych metodzie krawedzi: edges.ToList().ForEach( e => ListGraphGenerator.InsertConnection( graph, e.Start, e.End, e.Weight)); if (!ListGraphValidator.ValidateGraph(graph)) { throw new IncorrectGraphException(); } return(graph.Select(i => i.ToArray()).ToArray()); }
// ********************************************************************* // Generuje losowy graf o zadanej liczbie wierzcholkow i procentowej // gestosci (max. 100; min. gestosc jest automatycznie dostosowywana, // jednak deklarowana nie moze byc mniejsza niz 1), uwzgledniajac // maksymalna wage krawedzi. // W pzypadku niepoprawnych parametrow, graf nie zostanie wygenerowany. // ********************************************************************* public void Generate(int vertices, int density, int maxWeight) { list = ListGraphGenerator.Generate(vertices, density, maxWeight); }