private void btnChayTuDong_Click(object sender, EventArgs e) { if (Check()) { // kiểm tra time delay int timeDelay = 0; try { timeDelay = Int32.Parse(txtDelay.Text); if (timeDelay < 0) { MessageBox.Show("Time delay phải là số nguyên dương", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } catch { MessageBox.Show("Time delay phải là số nguyên dương", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } btnTamDung.Enabled = true; btnKetThuc.Enabled = true; btnBatDauChayTungBuoc.Enabled = false; groupSetting.Enabled = false; listDoThi = Hamilton.Run(Data.Data.graph_Hamilton, (int)cbxDinhXuatPhat.SelectedValue); index = 0; timer.Enabled = true; timer.Interval = timeDelay; timer.Start(); return; } }
static void TestHamilton() { var hamilton = new Hamilton(6); int[,] A = new int[50, 50]; A[0, 0] = 0; A[0, 1] = 1; A[0, 2] = 0; A[0, 3] = 1; A[0, 4] = 0; A[1, 0] = 1; A[1, 1] = 0; A[1, 2] = 1; A[1, 3] = 0; A[1, 4] = 1; A[2, 0] = 0; A[2, 1] = 1; A[2, 2] = 0; A[2, 3] = 1; A[2, 4] = 1; A[3, 0] = 1; A[3, 1] = 0; A[3, 2] = 1; A[3, 3] = 0; A[3, 4] = 1; A[4, 0] = 0; A[4, 1] = 1; A[4, 2] = 1; A[4, 3] = 1; A[4, 4] = 0; var arrayHamilton = hamilton.FindHamilton(A, 5); }
private void btnBatDauChayTungBuoc_Click(object sender, EventArgs e) { if (btnBatDauChayTungBuoc.Text == "Bắt đầu chạy từng bước") { if (Check()) { listDoThi = Hamilton.Run(Data.Data.graph_Hamilton, (int)cbxDinhXuatPhat.SelectedValue); index = 0; HienThiDoThi(); btnChayTuDong.Enabled = false; btnPrev.Enabled = true; btnNext.Enabled = true; btnStart.Enabled = true; btnEnd.Enabled = true; groupSetting.Enabled = false; btnBatDauChayTungBuoc.Text = "Kết thúc chạy từng bước"; } return; } if (btnBatDauChayTungBuoc.Text == "Kết thúc chạy từng bước") { btnBatDauChayTungBuoc.Text = "Bắt đầu chạy từng bước"; btnChayTuDong.Enabled = true; btnPrev.Enabled = false; btnNext.Enabled = false; btnStart.Enabled = false; btnEnd.Enabled = false; groupSetting.Enabled = true; return; } }
public void TestHamilton() { var projectPath = Directory .GetParent(Environment.CurrentDirectory) .Parent .FullName; var HamiltonTrueDirectory = Path.Combine(projectPath, "Graphs", "Hamilton", "True"); var HamiltonFalseDirectory = Path.Combine(projectPath, "Graphs", "Hamilton", "False"); var TrueGraphs = Directory.GetFiles(HamiltonTrueDirectory); var FalseGraphs = Directory.GetFiles(HamiltonFalseDirectory); foreach (var graph in TrueGraphs) { var Graph = GraphLoad.LoadMatrix(graph); Assert.IsTrue(Hamilton.IsHamilton(Graph), graph); } foreach (var graph in FalseGraphs) { var Graph = GraphLoad.LoadMatrix(graph); Assert.IsFalse(Hamilton.IsHamilton(Graph), graph); } }
private void IsHamilton(object sender, RoutedEventArgs e) { bool value = Hamilton.IsHamilton(Graph); string message = "Graf " + (value ? "" : "nie") + " jest Hamiltonowski"; MessageBox.Show(message); }
static void TestInitMatrix( IGoogleMapClient googleMapClient, List <string> cities, string key) { var range = 10000; int[,] matrix = new int[9, 9]; for (int i = 0; i < cities.Count; i++) { for (int j = 0; j < cities.Count; j++) { var directions = googleMapClient.Routes .GetDirection(new DirectionRequest() { origin = cities[i], destination = cities[j] }, key).Result; var distanceDefault = GetDistance(directions.Data); if (distanceDefault > 0 || i == j) { matrix[i, j] = 1; } for (int k = 0; k < cities.Count; k++) { var distanceCheck = 0L; if (k == i || k == j) { continue; } var checkDirections = googleMapClient.Routes .GetDirection(new DirectionRequest() { origin = cities[i], destination = cities[j], waypoints = cities[k] }, key).Result; distanceCheck = GetDistance(checkDirections.Data); if ((distanceCheck - distanceDefault) < range) { matrix[i, j] = 0; } } } } var hamilton = new Hamilton(10); var arrayHamilton = hamilton.FindHamilton(matrix, cities.Count); }
public void TestHamilton() { hamilton = new Hamilton(); hamilton.graph = graph; foreach (var v in hamilton.ShortestHamiltonCycle()) { System.Diagnostics.Debug.Write(v.index + " "); } System.Diagnostics.Debug.WriteLine($"Distance: {hamilton.minDistance}"); }
public async Task <List <Models.Hamilton.Hamilton> > Find( List <string> locations, long range, string key) { if (string.IsNullOrEmpty(key)) { throw new System.ArgumentNullException(nameof(key)); } int[,] matrix = new int[locations.Count, locations.Count]; long[,] distance = new long[locations.Count, locations.Count]; string[,] summary = new string[locations.Count, locations.Count]; for (int i = 0; i < locations.Count; i++) { for (int j = 0; j < locations.Count; j++) { var directions = await routes.GetDirection( new DirectionRequest() { origin = locations[i], destination = locations[j] }, key); var distanceDefault = GetDistance(directions.Data); if (distanceDefault > 0 || i == j) { matrix[i, j] = 1; distance[i, j] = distanceDefault; summary[i, j] = directions.Data.routes[0].summary; } for (int k = 0; k < locations.Count; k++) { var distanceCheck = 0L; if (k == i || k == j) { continue; } var checkDirections = await routes.GetDirection( new DirectionRequest() { origin = locations[i], destination = locations[j], waypoints = locations[k] }, key); distanceCheck = GetDistance(checkDirections.Data); if ((distanceCheck - distanceDefault) < range || (distanceCheck == distanceDefault)) { matrix[i, j] = 0; break; } } } } var hamilton = new Hamilton(locations.Count + 1); var arrHamiltons = hamilton.FindHamilton(matrix, locations.Count); var response = new List <Models.Hamilton.Hamilton>(); foreach (var arrHamilton in arrHamiltons) { var arrHamiltonResponse = arrHamilton.Select(a => locations[a]).ToArray(); var distanceValue = 0L; var hamiltonDetails = new List <HamiltonDetail>(); for (int i = 0; i < arrHamilton.Length - 1; i++) { distanceValue += distance[arrHamilton[i], arrHamilton[i + 1]]; var detail = new HamiltonDetail() { origin = arrHamiltonResponse[i], destination = arrHamiltonResponse[i + 1], distance = new Distance() { text = ((double)distance[arrHamilton[i], arrHamilton[i + 1]] / 1000).ToString() + " km", value = distance[arrHamilton[i], arrHamilton[i + 1]] }, summary = summary[arrHamilton[i], arrHamilton[i + 1]] }; hamiltonDetails.Add(detail); } var result = new Models.Hamilton.Hamilton() { hamiltons = arrHamiltonResponse, distance = new Distance { text = ((double)distanceValue / 1000).ToString() + " km", value = distanceValue }, detail = hamiltonDetails }; response.Add(result); } return(response); }