
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):