As far as I know, the only way to figure this out is by letting a computer run through all the possibilities. It is a small puzzle, so this does not take long. I will assume that you want the final solved position to have the blank in the bottom right corner, with the tiles in numerical order: 123 456 78. The computer starts at this end position, and works backwards to see how many moves it takes to get there from any other position. This takes at most 31 moves: 0: 1 16: 4485 1: 2 17: 5638 2: 4 18: 9529 3: 8 19: 10878 4: 16 20: 16993 5: 20 21: 17110 6: 39 22: 23952 7: 62 23: 20224 8: 116 24: 24047 9: 152 25: 15578 10: 286 26: 14560 11: 396 27: 6274 12: 748 28: 3910 13: 1024 29: 760 14: 1893 30: 221 15: 2512 31: 2 Then we have to do the same with one of the corner tiles locked. Let's lock tile 1, the tile diagonally opposite the blank space in the final solved arrangement. **Lock Tile 1** 0: 1 18: 1099 1: 2 19: 1364 2: 4 20: 1593 3: 8 21: 1834 4: 10 22: 2031 5: 14 23: 2088 6: 23 24: 1953 7: 34 25: 1640 8: 48 26: 1288 9: 70 27: 924 10: 94 28: 574 11: 124 29: 268 12: 175 30: 122 13: 268 31: 58 14: 373 32: 23 15: 512 33: 4 16: 667 34: 2 17: 868 As you can see, there clearly are some arrangements that take longer to solve, as now some need 34 moves. I had the computer compare the results, and it found: - 3971 arrangments that take 2 more moves - 2176 arrangments that take 4 more moves - 1045 arrangments that take 6 more moves - 254 arrangments that take 8 more moves - 102 arrangments that take 10 more moves The rest need the same amount. Of those that need 10 more moves, there are 11 that have the space in the centre. They are: 24/14: 125 132 7 3 4 6 486 578 26/16: 125 128 132 7 6 7 3 4 7 438 465 865 126 132 132 7 8 4 7 4 8 435 586 675 28/18: 132 132 7 5 7 6 486 458 30/20: 132 7 8 465 The numbers on the left are the number of moves in the optimal solution. **Lock Tile 3** One could instead lock the corner tile 3. Locking corner 7 is equivalent to locking 3, just reflected in the diagonal. 0: 1 18: 1047 1: 2 19: 1317 2: 3 20: 1568 3: 7 21: 1821 4: 11 22: 2014 5: 13 23: 2102 6: 19 24: 1997 7: 35 25: 1688 8: 46 26: 1317 9: 58 27: 939 10: 86 28: 624 11: 127 29: 343 12: 174 30: 169 13: 247 31: 59 14: 344 32: 20 15: 480 33: 9 16: 637 34: 3 17: 833 Again, some arrangements that take 34 moves. Compared to the standard puzzle, there are: - 3821 arrangments that take 2 more moves - 2628 arrangments that take 4 more moves - 1069 arrangments that take 6 more moves - 326 arrangments that take 8 more moves - 97 arrangments that take 10 more moves Of those that need 10 more moves, there are once again 11 that have the space in the centre. They are: 22/12: 523 1 8 476 26/16: 213 213 213 4 6 7 5 8 6 785 864 475 213 213 483 5 8 7 6 5 1 476 584 762 28/18: 213 423 583 4 5 1 8 1 4 768 756 762 30/20: 213 4 8 756 Here is the program I slapped together for this. It is written in C#. using System; using System.Collections.Generic; namespace test { class PSESlide8 { static void Main() { var locked = CalcGodsAlgorithm('3'); // or ('1'); var free = CalcGodsAlgorithm('z'); foreach (var pair in locked) { var pos = pair.Key; var lnlocked = pair.Value; var lnfree = free[pos]; if (lnlocked > lnfree) { Console.WriteLine("{0},{1},{2} : {3}", lnlocked-lnfree, lnlocked, lnfree, pos); } } } static Dictionary<string, int> CalcGodsAlgorithm(char fixedtile) { Dictionary<string,int> visited = new Dictionary<string, int>(); List<string> todo = new List<string>{"12345678 "}; int n1 = 1; int n2 = 0; int ln = 0; while (todo.Count > 0) { string pos = todo[0]; todo.RemoveAt(0); n1--; visited.Add(pos,ln); // add all neighbours to to-do list for (int m = 0; m < 4; m++) { string pos2 = DoMove(pos, m, fixedtile); if (pos2 != null && !visited.ContainsKey(pos2) && !todo.Contains(pos2)) { todo.Add(pos2); n2++; } } if (n1 == 0) { n1 = n2; n2 = 0; ln++; Console.WriteLine("{0}: {1}", ln, n1); } } return visited; } static string DoMove(string input, int mv, char fixedtile) { int b = input.IndexOf(" ", StringComparison.Ordinal); if (mv == 0 && b >= 3) { return Swap(input, b, b - 3, fixedtile); } if (mv == 1 && b < 6) { return Swap(input, b, b + 3, fixedtile); } if (mv == 2 && b % 3 != 0) { return Swap(input, b, b - 1, fixedtile); } if (mv == 3 && b % 3 != 2) { return Swap(input, b, b + 1, fixedtile); } return null; } static string Swap(string input, int i, int j, char fixedtile) { if (input[j] == fixedtile) return null; if (i > j) return Swap(input, j, i, fixedtile); if (i == j) return input; return input.Substring(0, i) + input.Substring(j, 1) + input.Substring(i + 1, j - i - 1) + input.Substring(i, 1) + input.Substring(j + 1); } } }