Advertisement
bokunda

matrica

Jun 18th, 2018
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.69 KB | None | 0 0
  1. from utils import *
  2. import copy
  3.  
  4. class Problem:
  5.  
  6.     def __init__(self, n):
  7.         self.n = n
  8.         self.initial = [[0] * n for i in range(n)] # matrica n x n (inicijalizovana na nule)
  9.  
  10.     def is_valid(self, state, tI, tJ):
  11.         # da li se neka kraljica nalazi u koloni
  12.         for i in range(self.n):
  13.             if i != tI and state[i][tJ] == 1:
  14.                 return False
  15.  
  16.         # da li se neka kraljica nalazi u redu
  17.         for j in range(self.n):
  18.             if j != tJ and state[tI][j] == 1:
  19.                 return False
  20.  
  21.         # da li se nalazi na dijagonali gore-levo
  22.         i = tI
  23.         j = tJ
  24.         while i > 0 and j > 0:
  25.             i -= 1
  26.             j -= 1
  27.             if state[i][j] == 1:
  28.                 return False
  29.  
  30.         # da li se nalazi na dijagonali dole-desno
  31.         i = tI
  32.         j = tJ
  33.         while i < self.n - 1 and j < self.n - 1:
  34.             i += 1
  35.             j += 1
  36.             if state[i][j] == 1:
  37.                 return False
  38.  
  39.         # da li se nalazi na dijagonali gore-desno
  40.         i = tI
  41.         j = tJ
  42.         while i > 0 and j < self.n - 1:
  43.             i -= 1
  44.             j += 1
  45.             if state[i][j] == 1:
  46.                 return False
  47.  
  48.         # da li se nalazi na dijagonali dole-levo
  49.         i = tI
  50.         j = tJ
  51.         while i < self.n - 1 and j > 0:
  52.             i += 1
  53.             j -= 1
  54.             if state[i][j] == 1:
  55.                 return False
  56.  
  57.         return True
  58.        
  59.        
  60.        
  61.        
  62.        
  63.        
  64.        
  65.        
  66.        
  67.        
  68.     def actions(self, state):
  69.         next_states = []
  70.         for i in range(self.n):
  71.             for j in range(self.n):
  72.                 if state[i][j] == 0:
  73.                     new_state = copy.deepcopy(state)
  74.                     new_state[i][j] = 1
  75.  
  76.                     if self.is_valid(new_state, i, j):
  77.                         next_states.append(new_state)
  78.  
  79.         return next_states        
  80.  
  81.     def goal_test(self, state):
  82.         queens_number = 0
  83.         for i in range(self.n):
  84.             for j in range(self.n):
  85.                 if state[i][j] == 1:
  86.                     queens_number += 1
  87.  
  88.         if queens_number == self.n:
  89.             return True
  90.         else:
  91.             return False
  92.        
  93.  
  94.  
  95. # NODE KLASA       
  96.  
  97. def print_matrix(matrix):
  98.     n = len(matrix)
  99.    
  100.     for i in range(n):
  101.         for j in range(n):
  102.             if matrix[i][j] == 1:
  103.                 print (" K ", end = "")
  104.             else:
  105.                 print (" _ ", end = "")
  106.         print()
  107.    
  108. def breadth_first_search(problem):
  109.     return graph_search(problem, FIFOQueue())
  110.  
  111. def depth_first_seach(problem):
  112.     return graph_search(problem, [])
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement