SzybciorSmartTraktor/graph.py
2022-04-07 18:44:33 +02:00

59 lines
2.0 KiB
Python

import settings
import math
from collections import defaultdict
class Instance:
def __init__(self):
self.graph = defaultdict(list)
def config(self, fields):
adjacency_list = self.generate_graph()
fields_to_visit = self.generate_target_fields(fields)
print("Adjacency list: " + str(dict(adjacency_list)))
print("List of targets: " + str(fields_to_visit))
def add_edge(self, u, v):
self.graph[u].append(v)
def generate_graph(self):
width = settings.Field.horizontal_count()
height = settings.Field.vertical_count()
for i in range(height):
for j in range(width):
point = i * width + j
# point_row = math.floor(point/width)
# point_column = point % width
point_left = i * width + j - 1
point_left_column = point_left - width * i
point_right = i * width + j + 1
point_right_column = point_right % width
point_up = (i - 1) * width + j
point_up_row = math.floor(point_up / width)
point_down = (i + 1) * width + j
point_down_row = math.floor(point_down / width)
if point_left_column >= 0:
self.add_edge(point, point_left)
if point_right_column > 0:
self.add_edge(point, point_right)
if point_up_row >= 0:
self.add_edge(point, point_up)
if point_down_row < height:
self.add_edge(point, point_down)
return self.graph
@staticmethod
def generate_target_fields(fields):
width = settings.Field.horizontal_count()
height = settings.Field.vertical_count()
fields_to_visit = []
for i in range(height):
for j in range(width):
point = i * width + j
if fields[j][i] == 'dirt':
fields_to_visit.append(point)
return fields_to_visit