static void Main(string[] args) { int[,] edges = new int[, ] { { 0, 1 }, { 1, 2 }, { 2, 3 }, { 3, 4 }, { 4, 5 }, { 5, 6 }, { 6, 3 }, { 6, 0 }, { 6, 1 }, { 1, 3 } }; int[] weights = new int[10] { 1, 2, 1, 3, 2, 2, 1, 3, 3, 4 }; IGraph graph = new GraphAdjacencyList(7); for (int i = 0; i < 10; i++) { graph.AddEdge(graph.GetVertex(edges[i, 0]), graph.GetVertex(edges[i, 1]), weights[i]); } // IGraph sceleton = GraphWorker.Prim(graph); // sceleton.Edges().ForEach(edge => // { // Console.Out.WriteLine(edge.ToString()); // }); GraphProps graphProps = GraphWorker.WaveAlgorithm(graph, graph.GetVertex(0)); Console.Out.WriteLine(graphProps); graph.Vertices().ForEach(vertex => { Console.Out.WriteLine(vertex.ToString()); }); }
public static GraphProps WaveAlgorithm(IGraph graph, Vertex start) { graph.Vertices().ForEach(vertex => { vertex.Colour = 0; }); Queue <Vertex> queue = new Queue <Vertex>(); queue.Enqueue(start); GraphProps graphProps = new GraphProps(); start.Colour = 1; while (queue.Count > 0) { Vertex temp = queue.Dequeue(); List <Vertex> surrounding = graph.Surrounding(temp); surrounding.ForEach(vertex => { if (vertex.Colour == 0) { vertex.Colour = temp.Colour + 1; queue.Enqueue(vertex); vertex.ComeFrom = temp; } else if (vertex.Colour % 2 == temp.Colour % 2) { graphProps.IsBipartite = false; } }); } graphProps.IsConnected = true; foreach (var vertex in graph.Vertices()) { if (vertex.Colour == 0) { graphProps.IsConnected = false; break; } } return(graphProps); }