Пример #1
0
        private bool check(myTree tree, myNode node)
        {
            bool c = true;

            foreach (myNode n in tree.nodes)
            {
                if (n.X == node.X && n.Y == node.Y)
                {
                    c = false;
                }
            }
            return(c);
        }
Пример #2
0
        private void label38_Click(object sender, EventArgs e)//ids
        {
            myNode gool   = new myNode(0, 0);
            bool   isGool = pictureBox1.Location.X == pictureBox2.Location.X ? true : false;
            myNode root   = new myNode(pictureBox1.Location.X, pictureBox1.Location.Y);

            root.level = 0;
            myTree IDS = new myTree(root);

            IDS.CurrentNode = root;
            int z = 367; bool b = true; int i = 0;

            for (int iz = 0; iz < z; iz++)
            {
                IDS.CurrentNode.Visited = true;
                List <myNode> newNodes = new List <myNode>();
                pictureBox3.Location = new Point(IDS.CurrentNode.X, IDS.CurrentNode.Y);

                if (pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds))
                {
                    gool = IDS.CurrentNode;
                    break;
                }


                myNode node1 = new myNode(IDS.CurrentNode.X + 10, IDS.CurrentNode.Y);
                pictureBox3.Location = new Point(node1.X, node1.Y);

                if (collision1())
                {
                    node1 = null;
                }
                else
                {
                    node1.Parent = IDS.CurrentNode;
                    node1.level  = IDS.CurrentNode.level + 1;

                    if (check(IDS, node1))
                    {
                        IDS.nodes.Add(node1);
                    }
                }
                newNodes.Add(node1);
                myNode node2 = new myNode(IDS.CurrentNode.X - 10, IDS.CurrentNode.Y);
                pictureBox3.Location = new Point(node2.X, node2.Y);

                if (collision1())
                {
                    node2 = null;
                }
                else
                {
                    node2.Parent = IDS.CurrentNode;
                    node2.level  = IDS.CurrentNode.level + 1;

                    if (check(IDS, node2))
                    {
                        IDS.nodes.Add(node2);
                    }
                }
                newNodes.Add(node2);
                myNode node3 = new myNode(IDS.CurrentNode.X, IDS.CurrentNode.Y + 10);
                pictureBox3.Location = new Point(node3.X, node3.Y);

                if (collision1())
                {
                    node3 = null;
                }
                else
                {
                    node3.Parent = IDS.CurrentNode;
                    node3.level  = IDS.CurrentNode.level + 1;

                    if (check(IDS, node3))
                    {
                        IDS.nodes.Add(node3);
                    }
                }
                newNodes.Add(node3);
                myNode node4 = new myNode(IDS.CurrentNode.X, IDS.CurrentNode.Y - 10);
                pictureBox3.Location = new Point(node4.X, node4.Y);

                if (collision1())
                {
                    node4 = null;
                }
                else
                {
                    node4.Parent = IDS.CurrentNode;
                    node4.level  = IDS.CurrentNode.level + 1;

                    if (check(IDS, node4))
                    {
                        IDS.nodes.Add(node4);
                    }
                }
                newNodes.Add(node4);
                IDS.CurrentNode = IDS.CurrentNode.expand(newNodes);
                IDS.CurrentNode = IDS.nodes[iz + 1];
                if (i == z - 1 && i < IDS.nodes.Count)
                {
                    ++z; iz = 0;
                }
                i++;
            }

            Stack path = new Stack();

            while (b)
            {
                path.Push(gool);
                gool = gool.Parent;
                if (gool == root)
                {
                    b = false;
                }
                break;
            }
            int time = 0;

            for (int iz = 0; iz < IDS.nodes.Count; iz++)
            {
                if (IDS.nodes[iz].Visited == true)
                {
                    time++;
                }
            }
            int PathCost = path.Count;

            while (path.Count != 0)
            {
                myNode temp = (myNode)path.Pop();
                pictureBox1.Location = new Point(temp.X, temp.Y);
                pictureBox1.Refresh();
                System.Threading.Thread.Sleep(50);
            }
            if (b == true)
            {
                MessageBox.Show("Congratolation \n your path cost = " + (Math.Abs((PathCost + IDS.nodes.Count) * (z - IDS.nodes.Count))) + " \n your space = " + IDS.nodes.Count + "\n your time = " + time);
            }
        }
Пример #3
0
        private void label36_Click(object sender, EventArgs e)//dls
        {
            myNode gool   = new myNode(0, 0);
            bool   isGool = pictureBox1.Location.X == pictureBox2.Location.X ? true : false;
            myNode root   = new myNode(pictureBox1.Location.X, pictureBox1.Location.Y);

            root.level = 0;
            myTree DlS = new myTree(root);

            DlS.CurrentNode = root;

            for (int i = 0; i < 50; i++)
            {
                DlS.CurrentNode.Visited = true;
                List <myNode> newNodes = new List <myNode>();
                pictureBox3.Location = new Point(DlS.CurrentNode.X, DlS.CurrentNode.Y);

                if (pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds))
                {
                    gool = DlS.CurrentNode;
                    break;
                }


                myNode node1 = new myNode(DlS.CurrentNode.X + 10, DlS.CurrentNode.Y);
                pictureBox3.Location = new Point(node1.X, node1.Y);

                if (collision1())
                {
                    node1 = null;
                }
                else
                {
                    node1.Parent = DlS.CurrentNode;
                    node1.level  = DlS.CurrentNode.level + 1;

                    if (check(DlS, node1))
                    {
                        DlS.nodes.Add(node1);
                    }
                }
                newNodes.Add(node1);
                myNode node2 = new myNode(DlS.CurrentNode.X - 10, DlS.CurrentNode.Y);
                pictureBox3.Location = new Point(node2.X, node2.Y);

                if (collision1())
                {
                    node2 = null;
                }
                else
                {
                    node2.Parent = DlS.CurrentNode;
                    node2.level  = DlS.CurrentNode.level + 1;

                    if (check(DlS, node2))
                    {
                        DlS.nodes.Add(node2);
                    }
                }
                newNodes.Add(node2);
                myNode node3 = new myNode(DlS.CurrentNode.X, DlS.CurrentNode.Y + 10);
                pictureBox3.Location = new Point(node3.X, node3.Y);

                if (collision1())
                {
                    node3 = null;
                }
                else
                {
                    node3.Parent = DlS.CurrentNode;
                    node3.level  = DlS.CurrentNode.level + 1;

                    if (check(DlS, node3))
                    {
                        DlS.nodes.Add(node3);
                    }
                }
                newNodes.Add(node3);
                myNode node4 = new myNode(DlS.CurrentNode.X, DlS.CurrentNode.Y - 10);
                pictureBox3.Location = new Point(node4.X, node4.Y);

                if (collision1())
                {
                    node4 = null;
                }
                else
                {
                    node4.Parent = DlS.CurrentNode;
                    node4.level  = DlS.CurrentNode.level + 1;

                    if (check(DlS, node4))
                    {
                        DlS.nodes.Add(node4);
                    }
                }
                newNodes.Add(node4);
                DlS.CurrentNode.expand(newNodes);
                DlS.CurrentNode = DlS.nodes[i + 1];
            }

            Stack path = new Stack();
            bool  b    = true;

            while (b)
            {
                if (gool == root)
                {
                    b = false;
                }
                MessageBox.Show("sorry can't reach the goal☺");
                break;
            }
            int time = 0;

            for (int i = 0; i < DlS.nodes.Count; i++)
            {
                if (DlS.nodes[i].Visited == true)
                {
                    time++;
                }
            }
            int PathCost = path.Count;

            while (path.Count != 0)
            {
                myNode temp = (myNode)path.Pop();
                pictureBox1.Location = new Point(temp.X, temp.Y);
                pictureBox1.Refresh();
                System.Threading.Thread.Sleep(50);
            }
            if (b == true)
            {
                MessageBox.Show("Congratolation \n your path cost = " + PathCost + " \n your space = " + DlS.nodes.Count + "\n your time = " + time);
            }
        }
Пример #4
0
        private void label33_Click(object sender, EventArgs e)//bfs
        {
            myNode gool   = new myNode(0, 0);
            bool   isGool = pictureBox1.Location.X == pictureBox2.Location.X ? true : false;
            myNode root   = new myNode(pictureBox1.Location.X, pictureBox1.Location.Y);

            root.level = 0;
            myTree BFS = new myTree(root);

            BFS.CurrentNode = root;
            //while (!isGool)
            //{
            for (int i = 0; i < BFS.nodes.Count; i++)
            {
                BFS.CurrentNode.Visited = true;
                List <myNode> newNodes = new List <myNode>();
                pictureBox3.Location = new Point(BFS.CurrentNode.X, BFS.CurrentNode.Y);

                if (pictureBox3.Bounds.IntersectsWith(pictureBox2.Bounds))
                {
                    gool = BFS.CurrentNode;
                    break;
                }

                // EXBAND NEW NODES
                myNode node1 = new myNode(BFS.CurrentNode.X + 10, BFS.CurrentNode.Y);
                pictureBox3.Location = new Point(node1.X, node1.Y);
                // System.Threading.Thread.Sleep(600);
                if (collision1())
                {
                    node1 = null;
                }
                else
                {
                    node1.Parent = BFS.CurrentNode;
                    node1.level  = BFS.CurrentNode.level + 1;
                    //if(!BFS.nodes.Contains(node1))
                    if (check(BFS, node1))
                    {
                        BFS.nodes.Add(node1);
                    }
                }
                newNodes.Add(node1);
                myNode node2 = new myNode(BFS.CurrentNode.X, BFS.CurrentNode.Y + 10);
                pictureBox3.Location = new Point(node2.X, node2.Y);
                // System.Threading.Thread.Sleep(600);
                if (collision1())
                {
                    node2 = null;
                }
                else
                {
                    node2.Parent = BFS.CurrentNode;

                    node2.level = BFS.CurrentNode.level;
                    //if (!BFS.nodes.Contains(node2))
                    if (check(BFS, node2))
                    {
                        BFS.nodes.Add(node2);
                    }
                }
                newNodes.Add(node2);
                myNode node3 = new myNode(BFS.CurrentNode.X - 10, BFS.CurrentNode.Y);
                pictureBox3.Location = new Point(node3.X, node3.Y);
                // System.Threading.Thread.Sleep(600);
                if (collision1())
                {
                    node3 = null;
                }
                else
                {
                    node3.Parent = BFS.CurrentNode;
                    node3.level  = BFS.CurrentNode.level + 1;
                    //if (!BFS.nodes.Contains(node3))
                    if (check(BFS, node3))
                    {
                        BFS.nodes.Add(node3);
                    }
                }
                newNodes.Add(node3);
                myNode node4 = new myNode(BFS.CurrentNode.X, BFS.CurrentNode.Y - 10);
                pictureBox3.Location = new Point(node4.X, node4.Y);
                // System.Threading.Thread.Sleep(600);
                if (collision1())
                {
                    node4 = null;
                }
                else
                {
                    node4.Parent = BFS.CurrentNode;
                    node4.level  = BFS.CurrentNode.level + 1;

                    //if (!BFS.nodes.Contains(node4))
                    if (check(BFS, node4))
                    {
                        BFS.nodes.Add(node4);
                    }
                }
                newNodes.Add(node4);
                BFS.CurrentNode.expand(newNodes);
                // MessageBox.Show(BFS.CurrentNode.X.ToString());

                BFS.CurrentNode = BFS.nodes[i + 1];
            }
            Stack path = new Stack();
            bool  b    = true;

            while (b)
            {
                path.Push(gool);
                gool = gool.Parent;
                if (gool == root)
                {
                    b = false;
                }
            }
            int time = 0;

            for (int i = 0; i < BFS.nodes.Count; i++)
            {
                if (BFS.nodes[i].Visited == true)
                {
                    time++;
                }
            }
            int PathCost = path.Count;

            while (path.Count != 0)
            {
                myNode temp = (myNode)path.Pop();
                pictureBox1.Location = new Point(temp.X, temp.Y);
                pictureBox1.Refresh();
                System.Threading.Thread.Sleep(50);
            }

            MessageBox.Show("Congratolation \n your path cost = " + PathCost + " \n your space = " + BFS.nodes.Count + "\n your time = " + time);
        }