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); } }
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, "逆序数计算错误"); }
/// <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 = "其它信息:"; }
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(); }