Пример #1
0
        public static void moni()
        {
            Puzzle puzzle = new Puzzle(3, 3);

            puzzle.Items = new int[] { 0, 2, 5, 3, 4, 8, 6, 7, 1 };
            PuzzleAide puzzleAide = new PuzzleAide(puzzle);

            try
            {
                Console.WriteLine("");
                for (int j = 0; j < puzzle.Total; j++)
                {
                    Console.Write($"{puzzle.Items[j]},");
                }
                Console.WriteLine("");
                bool b = puzzleAide.Restore();
                if (b)
                {
                    Console.WriteLine("");
                    for (int j = 0; j < puzzle.Total; j++)
                    {
                        Console.Write($"{puzzle.Items[j]},");
                    }
                    Console.WriteLine("");
                    Console.WriteLine("成功!");
                }
                else
                {
                    Console.WriteLine("");
                    for (int j = 0; j < puzzle.Total; j++)
                    {
                        Console.Write($"{puzzle.Items[j]},");
                    }
                    Console.WriteLine("");
                    Console.WriteLine("失败!");
                    Console.Read();
                }
            }
            catch
            {
                Console.WriteLine("");
                for (int j = 0; j < puzzle.Total; j++)
                {
                    Console.Write($"{puzzle.Items[j]},");
                }
                Console.WriteLine("");
                Console.WriteLine("发生异常!");
                Console.Read();

                //puzzle = new Puzzle(100, 100);
                //puzzleAide = new PuzzleAide(puzzle);
            }
        }
Пример #2
0
        public void RetryNiXuTest()
        {
            Puzzle     p  = new Puzzle(100, 100);
            PuzzleAide pa = new PuzzleAide();

            pa.Disrupt(p);
            long inv1 = 0; int len = p.Items.Length;

            for (int i = 1; i < len; i++)
            {
                for (int j = 0; j < i; j++)
                {
                    if (p.Items[i] < p.Items[j])
                    {
                        inv1++;
                    }
                }
            }
            long inv2 = p.RetryNiXu();

            Assert.IsTrue(inv1 == inv2, "逆序数计算错误");
        }
Пример #3
0
        /// <summary>
        /// 初始化
        /// </summary>
        private void initBut_Click(object sender, RoutedEventArgs e)
        {
            string hangItem = hangShu.SelectionBoxItem.ToString();
            string lieItem  = lieShu.SelectionBoxItem.ToString();

            if (hangItem != "" && lieItem != "")
            {
                puzzle = new Puzzle(Convert.ToInt32(hangItem), Convert.ToInt32(lieItem));
                InitPuzzle();
                puzzleAide = new PuzzleAide(puzzle);
            }
            if (timer.IsEnabled)
            {
                timer.Stop();
            }
            timeLab.Content     = "计时:";
            indexLab.Content    = "被复原:";
            buShuLab.Content    = "步数:";
            SwapLab.Content     = "交换:";
            mnPosLab.Content    = "mn初始位置:";
            indexPosLab.Content = "index初始位置:";
            tarLab.Content      = "目的地位置:";
            messLab.Content     = "其它信息:";
        }
Пример #4
0
        static void Main(string[] args)
        {
            // int hangshu = 10;
            // int lieshu = 3;
            // Puzzle puzzle = new Puzzle(hangshu,lieshu);
            // PuzzleAide puzzleAide = new PuzzleAide(puzzle);
            // Queue<Swap> swaps = new Queue<Swap>();
            // int index = 22;
            // int mnpos = 24;
            // int enpos = 26;
            // int target = 23;
            // PuzzleAide.EntityToArgs entityToArgs = new PuzzleAide.EntityToArgs(mnpos, enpos, target, lieshu, hangshu);
            // puzzleAide.EntityTo(swaps,entityToArgs);
            // Swap swap1= puzzleAide.CheckExecutePlanFast(swaps,index, (swap,restoreRunInfo)=> {
            //     Console.WriteLine($"({swap.Empty},{swap.Entity})");
            // });
            // Console.WriteLine($"({swap1.Empty},{swap1.Entity})");
            //// puzzleAide.CheckSwap(new Swap(37,27),27);
            //Puzzle puzzle = new Puzzle(3,3);
            //PuzzleAide puzzleAide = new PuzzleAide(puzzle);
            //for (int i = 0; i < 100000; i++)
            //{
            //    Puzzle puzzle = new Puzzle(3, 3);
            //    PuzzleAide puzzleAide = new PuzzleAide();
            //    puzzleAide.Disrupt(puzzle);
            //    for (int j=0;j<9;j++)
            //    {
            //        for (int k=j+1;k<9;k++)
            //        {
            //            if (puzzle.Items[k]==puzzle.Items[j])
            //            {
            //                Console.WriteLine("重复");
            //                Console.Read();
            //            }
            //        }
            //    }
            //}
            moni();
            int ok = 0, fail = 0, err = 0;

            for (int i = 0; i < 1000; i++)
            {
                //byte[] ranBytes = new byte[4];
                //RNGCryptoServiceProvider rngServiceProvider = new RNGCryptoServiceProvider();
                //rngServiceProvider.GetBytes(ranBytes);
                //int hang = Math.Abs(BitConverter.ToInt32(ranBytes, 0));
                //byte[] ranBytes1 = new byte[4];
                //RNGCryptoServiceProvider rngServiceProvider1 = new RNGCryptoServiceProvider();
                //rngServiceProvider.GetBytes(ranBytes1);
                //int lie = Math.Abs(BitConverter.ToInt32(ranBytes1, 0));
                //hang = hang % 98 + 2;
                //lie = lie % 98 + 2;
                Puzzle     puzzle     = new Puzzle(10, 10);
                PuzzleAide puzzleAide = new PuzzleAide(puzzle);
                puzzleAide.DisruptReducible();
                try
                {
                    Console.WriteLine("");
                    for (int j = 0; j < puzzle.Total; j++)
                    {
                        Console.Write($"{puzzle.Items[j]},");
                    }
                    Console.WriteLine("");
                    bool b = puzzleAide.Restore(jiance);
                    if (b)
                    {
                        Console.WriteLine("");
                        for (int j = 0; j < puzzle.Total; j++)
                        {
                            Console.Write($"{puzzle.Items[j]},");
                        }
                        Console.WriteLine("");
                        Console.WriteLine("成功!");
                        ok++;
                    }
                    else
                    {
                        Console.WriteLine("");
                        for (int j = 0; j < puzzle.Total; j++)
                        {
                            Console.Write($"{puzzle.Items[j]},");
                        }
                        Console.WriteLine("");
                        Console.WriteLine("失败!");
                        Console.Read();
                        fail++;
                    }
                }
                catch
                {
                    Console.WriteLine("");
                    for (int j = 0; j < puzzle.Total; j++)
                    {
                        Console.Write($"{puzzle.Items[j]},");
                    }
                    Console.WriteLine("");
                    Console.WriteLine("发生异常!");
                    Console.Read();
                    err++;
                    //puzzle = new Puzzle(100, 100);
                    //puzzleAide = new PuzzleAide(puzzle);
                }
            }


            Console.WriteLine($"成功:{ok },失败:{fail},出错:{err}");
            Console.Read();
            Console.Read();
        }