Всем привет, вот дана такая задача: Lines
Я ее решил через обычный волновой алгоритм, представив лабиринт как матрицу NxN.
Но т.к. задача в разделе "Теория графов", значит ее нужно как-то через графы решить. Так вот, хотел бы спросить, а как?
Каким образом представить граф, и какая идея решения будет?
Спасибо.
По факту, вы искали путь от одной вершины графа к другой. Вершины графа в данном случае -- проходимые клетки матрицы, а ребра существуют между вершинами, в которых соответствующие им клетки соседние. Отсюда и есть теория графов.
Спасибо, я думал еще можно считать лабиринт как матрицу смежности, и просто обычным bfs'ом пройтись.
А какие идеи есть, что бы не матрицей смежности представлять данные, а списком?
Я просто хочу реализовать это так:
сразу при чтении входных данных формировать список смежных вершин.
Ну можно сделать функцию, принимающую координаты клетки и возвращающую число, уникальное для каждой клетки. Например, f(i,j)=i*(n+1)+j; Ну а дальше просто пробрасываем ребра между соседними вершинами...
Так а зачем вам в явном виде хранить граф?. Вы же и так знаете, в какие вершины у вас есть ребра. Вы это и использовали, почти наверняка, в своем решении.. Вы знаете, что из вершины, соответствующей клетке (x,y), есть ребра в вершины, которые соответствуют клеткам (x+1,y),(x-1,y),(x,y+1),(x,y-1), если эти вершины существуют.
все равно не понимаю :)
но мне как-то нужно хранить граф, что бы bfs применить..?
Я же говорю. Вы и так bfs применяете. У вас клетки (x,y) -- это вершины, а ребра вы, находясь в клетке, высчитываете.