Скачиваний:
7
Добавлен:
04.06.2024
Размер:
302.83 Кб
Скачать

If path is None:

path = [current_node]

#Проверяется является ли текущий путь кратчайшим

if shortest is None or len(path) < len(shortest):

print("Текущий путь:", path)

if current_node == goal:

print("Достигнута целевая вершина!")

shortest = path

for node in graph.neighbors(current_node):

If node not in path:

print("Переход к вершине", node)

new_path = dfs(graph, node, goal, path + [node], shortest)

If new_path:

shortest = new_path if not shortest or len(new_path) < len(shortest) else shortest

return shortest

# Начальная и конечная вершины для поиска кратчайшего пути

# start_node = 1

# goal_node = 8

# shortest_path = dfs(G, start_node, goal_node)

# print("Кратчайший путь от вершины", start_node, "к вершине", goal_node, ":", shortest_path)

# Шестиугольная решетка

def create_hexagonal_grid(M):

if M < 2:

return np.array([])

# Создание пустой матрицы смежности размером M x M

matrix_size = M * M

matrix = np.zeros((matrix_size, matrix_size), dtype=int)

# Заполнение матрицы смежности

for v in range(matrix_size):

R = v // M # Вычисление номера строки

C = v % M # Вычисление номера столбца

#Условия для соединения вершин шестиугольной решетки

if (R % 4 == 0 and C % 2 == 1) or (R % 4 == 2 and C % 2 == 0):

if R > 0:

matrix[v][v - M] = matrix[v - M][v] = 1# Соединяем с вершиной выше

if R < (M - 1) and C < (M - 1):

matrix[v][v + M + 1] = matrix[v + M + 1][v] = 1 # Соединяем с вершиной справа ниже

if R < (M - 1) and C > 0:

matrix[v][v + M - 1] = matrix[v + M - 1][v] = 1 # Соединяем с вершиной слева ниже

# print("Матрица смежности созданной решетки:")

# for row in matrix:

# print(row)

# Удаление лишних вершин (те, у которых меньше 2 связей)

non_isolated = np.array([i for i in range(matrix_size) if np.sum(matrix[i]) > 1], dtype=int)

matrix = matrix[non_isolated][:, non_isolated]

return matrix

M = 6 # Размер решетки M на M

matrix = create_hexagonal_grid(M)

print("Матрица смежности созданной решетки после удаления изолированных вершин:")

print(matrix)

G = nx.from_numpy_array(matrix)

pos = nx.spring_layout(G, iterations=100000, seed=1000)

nx.draw(G, pos, with_labels=True, node_size=500, node_color="skyblue", font_size=10, font_weight="bold")

plt.title("Шестиугольная решетка")

plt.show()

# Реализация графика

def create_hexagonal_grid_fixed(M):

if M < 2:

return np.array([])

matrix_size = M * M

matrix = np.zeros((matrix_size, matrix_size), dtype=int)

for v in range(matrix_size):

R = v // M

C = v % M

if (R % 4 == 0 and C % 2 == 1) or (R % 4 == 2 and C % 2 == 0):

if R > 0:

matrix[v][v - M] = matrix[v - M][v] = 1

if R < (M - 1) and C < (M - 1):

matrix[v][v + M + 1] = matrix[v + M + 1][v] = 1

if R < (M - 1) and C > 0:

matrix[v][v + M - 1] = matrix[v + M - 1][v] = 1

non_isolated = np.array([i for i in range(matrix_size) if np.sum(matrix[i]) > 1], dtype=int)

matrix = matrix[non_isolated][:, non_isolated]

return matrix

def dfs_shortest(matrix, current_node, goal, path=None, shortest=None):

Соседние файлы в предмете Построение и анализ графовых моделей