public void Go() { algorithmX = new AlgorithmX(); algorithmX.callBack = CallBack; tableau = new Node[5 * 25 + 3 * 8, 130]; index = 0; HouseConstraints(); ElementConstraints(); ExtraConstraints(); SingleConstraints(); PairConstraints(); NextToConstraints(); RightOfConstraints(); ClearCells(); algorithmX.Init(tableau); bool retVal = algorithmX.Search(); if (retVal) { Console.WriteLine("Congratulations !"); } else { Console.WriteLine("No solution"); } }
void Go() { int count = 0; foreach (Position position in positions) { int column = 60 + position.p.name; tableau[count, column] = new Node(count, column); foreach (Point p in position.p.content) { column = p.X + position.position.X + (p.Y + position.position.Y) * width; if (excluded != null) { int gt = 0; foreach (Point e in excluded) { if (column > e.X + e.Y * width) { gt++; } } column -= gt; } tableau[count, column] = new Node(count, column); } count++; } bool retVal = true; algorithmX.Init(tableau); DateTime t0 = DateTime.Now; retVal = algorithmX.Search(); DateTime t1 = DateTime.Now; if (retVal) { Console.WriteLine("\nCongratulations !, solved in {0} ms", (t1 - t0).TotalMilliseconds); } else { Console.WriteLine("\nSorry, no solution !"); } CheckSolution(); foreach (int index in algorithmX.result) { Console.WriteLine("{0} {1}", positions[index].position.X, positions[index].position.Y); positions[index].p.Print(); Console.WriteLine(); } }
void Go() { AlgorithmX algorithmX = new AlgorithmX(); algorithmX.callBack = CallBack; Node[,] tableau = new Node[94, 46]; for (int e = 0; e < 94; e++) { int r = e / 8; int c = e % 8; for (int rule = 0; rule < 46; rule++) { if (e < 64 && (rule == r || rule == 8 + c)) { tableau[e, rule] = new Node(e, rule); } else if (e < 64 && rule == 16 + r + c) { tableau[e, rule] = new Node(e, rule); } else if (e < 64 && rule == 31 + 7 - r + c) { tableau[e, rule] = new Node(e, rule); } else if (e >= 64 && rule == e - 64 + 16) { tableau[e, rule] = new Node(e, rule); } } } bool retVal = true; algorithmX.Init(tableau); DateTime t0 = DateTime.Now; retVal = algorithmX.Search(); DateTime t1 = DateTime.Now; if (retVal) { Console.WriteLine("\nCongratulations !, solved in {0} ms", (t1 - t0).TotalMilliseconds); } else { Console.WriteLine("\nSorry, no solution !"); } CheckSolution(algorithmX.result); }
void Go() { AlgorithmX algorithmX = new AlgorithmX(); algorithmX.callBack = CallBack; Node[,] tableau = new Node[729, 324]; StreamReader stream = new StreamReader(Directory.GetParent(Environment.CurrentDirectory).Parent.FullName + "/sudoku22533.txt"); string s = stream.ReadLine(); string[] split = s.Split(new char[] { '=' }); for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { string c = split[split.Length - 1].Substring(9 * i + j, 1); sudoku[i, j] = int.Parse(c == "." ? "0" : c); } } Print(); for (int r = 0; r < 9; r++) { for (int c = 0; c < 9; c++) { for (int n = 0; n < 9; n++) { int tr = 81 * r + 9 * c + n; int tc = 9 * r + c; if (sudoku[r, c] == 0 || sudoku[r, c] - 1 == n) { tableau[tr, tc] = new Node(tr, tc); } } } } for (int r = 0; r < 9; r++) { for (int n = 0; n < 9; n++) { for (int c = 0; c < 9; c++) { int tr = 81 * r + 9 * c + n; int tc = 81 + 9 * r + n; if (sudoku[r, c] == 0 || sudoku[r, c] - 1 == n) { tableau[tr, tc] = new Node(tr, tc); } } } } for (int c = 0; c < 9; c++) { for (int n = 0; n < 9; n++) { for (int r = 0; r < 9; r++) { int tr = 81 * r + 9 * c + n; int tc = 162 + 9 * c + n; if (sudoku[r, c] == 0 || sudoku[r, c] - 1 == n) { tableau[tr, tc] = new Node(tr, tc); } } } } for (int i1 = 0; i1 < 3; i1++) { for (int i2 = 0; i2 < 3; i2++) { for (int n = 0; n < 9; n++) { for (int j1 = 0; j1 < 3; j1++) { for (int j2 = 0; j2 < 3; j2++) { int tr = 81 * (3 * i1 + j1) + 9 * (3 * i2 + j2) + n; int tc = 243 + 9 * (3 * i1 + i2) + n; if (sudoku[3 * i1 + j1, 3 * i2 + j2] == 0 || sudoku[3 * i1 + j1, 3 * i2 + j2] - 1 == n) { tableau[tr, tc] = new Node(tr, tc); } } } } } } bool retVal = true; algorithmX.Init(tableau); DateTime t0 = DateTime.Now; retVal = algorithmX.Search(); DateTime t1 = DateTime.Now; if (retVal) { Console.WriteLine("\nCongratulations !, solved in {0} ms", (t1 - t0).TotalMilliseconds); } else { Console.WriteLine("\nSorry, no solution !"); } CheckSolution(algorithmX.result); }