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;
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        private void IsHamilton(object sender, RoutedEventArgs e)
        {
            bool value = Hamilton.IsHamilton(Graph);

            string message = "Graf " + (value ? "" : "nie") + " jest Hamiltonowski";

            MessageBox.Show(message);
        }
Beispiel #6
0
        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);
        }