Guest User

Untitled

a guest
Feb 19th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. #
  2. # exercise of backtracking algorithm.
  3. # 2008.07.26
  4. #
  5. require 'pp'
  6.  
  7. # (x, y) のマスに置けるか
  8. def test(x, y, board)
  9. x.times do |i|
  10. # 左
  11. if board[i][y] == 1
  12. #p "1 false in board[#{i}][#{y}] == 1"
  13. return false
  14. end
  15. # 左ななめ上
  16. if x-i > 0 and y-i > 0 and board[x-i-1][y-i-1] == 1
  17. #p "2 false in board[#{x-i-1}][#{y-i-1}] == 1"
  18. return false
  19. end
  20. # 左ななめ下
  21. if x-i > 0 and y+i+1 < 8 and board[x-i-1][y+i+1] == 1
  22. #p "3 false in board[#{x-i-1}][#{y+i+1}] == 1"
  23. return false
  24. end
  25. end
  26. # 上
  27. y.times do |i|
  28. if board[x][i] == 1
  29. #p "4 false in board[#{x}][#{i}] == 1"
  30. return false
  31. end
  32. end
  33. return true
  34. end
  35.  
  36. def solve(x, board)
  37. 8.times do |y|
  38. if test(x, y, board)
  39. board[x][y] = 1 # 置く
  40. return true if x == 7 or solve(x+1, board)
  41. board[x][y] = 0 # とる
  42. end
  43. end
  44. false
  45. end
  46.  
  47. # 結果表示
  48. def show(board)
  49. 8.times do |y|
  50. 8.times do |x|
  51. print "#{board[x][y]} "
  52. end
  53. puts
  54. end
  55. end
  56.  
  57. $solutions = []
  58. board = []
  59. 8.times {|i| board.push Array.new(8, 0) }
  60.  
  61. # メイン
  62. solve(0, board)
  63. show(board)
Add Comment
Please, Sign In to add comment