rharjani

KnightL on a Chessboard

Feb 12th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.67 KB | None | 0 0
  1.  
  2.  
  3. moves = []
  4. def setmoves(i, j):
  5.     global moves
  6.     moves = []
  7.     moves.append((i,j))
  8.     moves.append((-i,j))
  9.     moves.append((i,-j))
  10.     moves.append((-i,-j))
  11.     moves.append((j,i))
  12.     moves.append((-j,i))
  13.     moves.append((j,-i))
  14.     moves.append((-j,-i))
  15.  
  16.  
  17. def id(row, col, sz):
  18.     return row*sz + col
  19.  
  20. def check(u,a,b,n):
  21.     if ((u[0] + a >= 0) and (u[0] +a < n) and (u[1] + b >= 0) and (u[1] + b < n)):
  22. #        if (abs(a) == 3 and abs(b) == 3):
  23. #            print u, a, b, n
  24.         return 1
  25.     return 0
  26.  
  27.  
  28. #print par
  29.  
  30. def bfs(s, n):
  31.     global par
  32.     par = [i for i in xrange(n*n)]
  33.     visited = [0]*(n*n)
  34.     queue = []
  35.     queue.append(s)
  36.  
  37.     while(queue != []):
  38.         u = queue.pop(0)
  39.         for i,j in moves:
  40.             if (check(u,i,j,n) and visited[id(u[0], u[1], n) + id(i,j,n)] == 0):
  41.                 visited[id(u[0], u[1], n) + id(i,j,n)] = 1
  42.                 par[id(u[0], u[1], n) + id(i,j,n)] = id(u[0], u[1], n)
  43.                 queue.append((u[0] + i, u[1] + j))
  44.     return par
  45.  
  46. count = 0
  47. def printpath(par, n):
  48.     if (par[n] == n):
  49.         return
  50.     global count
  51.     if (n == 0):
  52. #        print 0
  53.         return
  54. #    print n
  55.     count += 1
  56.     printpath(par, par[n])
  57.  
  58.  
  59. t = int(raw_input())
  60. par = [i for i in xrange(t*t)]
  61.  
  62. def main():
  63.     global t
  64.     global count
  65.     for i in range(1, t):
  66.         for j in range(1, t):
  67.             setmoves(i,j)
  68. #            print moves
  69.             p = bfs((0,0),t)
  70. #            print p
  71.             printpath(p, t*t-1)
  72.             if (count):
  73.                 print count,
  74.             else:
  75.                 print -1,
  76.             count = 0
  77.         print ""
  78. main()
Add Comment
Please, Sign In to add comment