示例#1
0
        private void Load_Graph_Click(object sender, RoutedEventArgs e)
        // Membuat graf satu arah dari file peta yang sudah diload sebelumnya
        {
            try
            {
                map = new Graf(dirGraph);
                Enter_Query.IsEnabled = true;
                Open_Query.IsEnabled  = true;
                Next.IsEnabled        = false;
                this.gViewer.Graph    = null;
                graph = new Msagl.Graph("graph");

                for (int i = map.getHouses() - 1; i > 0; i--)
                {
                    for (int j = map.getPath(i).Count() - 1; j >= 0; j--)
                    {
                        string str1 = i.ToString();
                        string str2 = map.getPath(i)[j].ToString();

                        graph.AddEdge(str1, str2).Attr.ArrowheadAtTarget = Msagl.ArrowStyle.None;

                        Microsoft.Msagl.Drawing.Node from = graph.FindNode(str1);
                        Microsoft.Msagl.Drawing.Node to   = graph.FindNode(str2);

                        from.Attr.FillColor = Microsoft.Msagl.Drawing.Color.White;
                        from.Attr.Shape     = Microsoft.Msagl.Drawing.Shape.Circle;
                        to.Attr.FillColor   = Microsoft.Msagl.Drawing.Color.White;
                        to.Attr.Shape       = Microsoft.Msagl.Drawing.Shape.Circle;
                    }
                }

                this.gViewer.Graph = graph;
            }
            catch
            {
                MessageBox.Show("      Error Code 0x05021999\n             File Input Error", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }
示例#2
0
        public void recurseSolve(int curr, int target, ref bool found, Graf path, ref List <int> result)
        // Algoritma pencarian menggunakan DFS
        {
            List <int> neighbor = path.getPath(curr);

            if (curr == target)
            {
                found   = true;
                now     = target;
                checker = 0;
                _timer.Start();
                result.Add(target);

                if (result.Count() != 0)
                {
                    nowpath = result[0].ToString();
                }
                else
                {
                    nowpath = "";
                }

                for (int j = 1; j < result.Count(); j++)
                {
                    nowpath += " -> " + result[j];
                }

                AutoClosingMessageBox.Show(nowpath, "Path", 1000);
            }
            else if (neighbor == null)
            {
                found   = false;
                prev    = curr;
                checker = 0;
                _timer2.Start();
                result.Remove(curr);

                if (result.Count() != 0)
                {
                    prevpath = result[0].ToString();
                }
                else
                {
                    prevpath = "";
                }

                for (int j = 1; j < result.Count(); j++)
                {
                    prevpath += " -> " + result[j];
                }

                AutoClosingMessageBox.Show(prevpath, "Path", 1000);
            }
            else
            {
                now     = curr;
                checker = 0;
                _timer.Start();
                result.Add(curr);

                if (result.Count() != 0)
                {
                    nowpath = result[0].ToString();
                }
                else
                {
                    nowpath = "";
                }

                for (int j = 1; j < result.Count(); j++)
                {
                    nowpath += " -> " + result[j];
                }

                AutoClosingMessageBox.Show(nowpath, "Path", 1000);
                int i = 0;

                while ((i < neighbor.Count) && (!found))
                {
                    recurseSolve(neighbor[i], target, ref found, path, ref result);
                    i++;
                }
                if (!found)
                {
                    prev    = curr;
                    checker = 0;
                    _timer2.Start();
                    result.Remove(curr);

                    if (result.Count() != 0)
                    {
                        prevpath = result[0].ToString();
                    }
                    else
                    {
                        prevpath = "";
                    }

                    for (int j = 1; j < result.Count(); j++)
                    {
                        prevpath += " -> " + result[j];
                    }

                    AutoClosingMessageBox.Show(prevpath, "Path", 1000);
                }
            }
        }