fork download
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. # Jakub Burzyński 2011 Python 2.7.2
  4. # www.algorytm.org
  5. # Problem skoczka (konika) szachowego,
  6. # dodatkowo mierzy czas wykonania
  7.  
  8. import sys, time
  9.  
  10. g_size = -1 # rozmiar szachownicy
  11. g_board = [] # szachownica
  12. g_d = 0 # zmienna do mierzenia czasu
  13.  
  14. def main():
  15. global g_size,g_d
  16. print "Problem skoczka na szachownicy"
  17. start_x = 0
  18. start_y = 0
  19.  
  20. while g_size == -1:
  21. if len(sys.argv) == 2:
  22. try:
  23. g_size = int(sys.argv[1])
  24. break
  25. except:
  26. print("Bledny parametr! <rozmiar>")
  27.  
  28. g_size = input("Rozmiar szachownicy: ")
  29. start_x = input("Pozycja X: ")
  30. start_y = input("Pozycja Y: ")
  31.  
  32. for i in range(0, g_size):
  33. g_board.append(g_size*[0])
  34.  
  35. sys.stdout.write("... ")
  36.  
  37. g_d = time.strftime("%S")
  38. move(start_y, start_x, 1)
  39.  
  40. print("Nie znaleziono rozwiazania")
  41.  
  42.  
  43. def move(y,x,counter):
  44. assert g_board[y][x] == 0
  45. g_board[y][x] = counter
  46.  
  47. if counter == g_size*g_size: # sprawdz czy znaleziono rozwiazanie - liczba ruchow równa liczbie pól
  48. drawChessboard()
  49. sys.exit(1)
  50.  
  51. jumps = ((-2,1),(-1,2),(1,2),(2,1),(2,-1),(1,-2),(-1,-2),(-2,-1)) # możliwe ruchy skoczka
  52. for jump in jumps:
  53. ty,tx = y+jump[0],x+jump[1]
  54. if canMove(ty,tx):
  55. move(ty,tx,counter+1) # rekurencja
  56. g_board[y][x] = 0
  57.  
  58.  
  59. def canMove(ty,tx): # sprawdza czy ruch nie wychodzi poza szachownice
  60. return ty>=0 and tx>=0 and ty<g_size and tx<g_size and g_board[ty][tx] == 0
  61.  
  62.  
  63. def drawChessboard(): # wypisuje szachownicę z rozwiązaniem
  64. global g_d
  65. d2 = time.strftime("%S")
  66. delta = int(d2)-int(g_d)
  67. print(str(delta) + "s")
  68.  
  69. scale = len(str(g_size*g_size))
  70. print(g_size*("+" + scale*"-") + "+")
  71. for linia in g_board:
  72. for kolumna in linia:
  73. sys.stdout.write("|%*d" % (scale,kolumna))
  74. print("|\n"+g_size*("+" + scale*"-") + "+")
  75.  
  76.  
  77. if __name__ == "__main__":
  78. main()
Runtime error #stdin #stdout 0.09s 10840KB
stdin
5 0 0
stdout
Problem skoczka na szachownicy
Rozmiar szachownicy: