Блог пользователя Easy_

Автор Easy_, 10 лет назад, По-русски

Всем привет, вот дана такая задача: Lines

Я ее решил через обычный волновой алгоритм, представив лабиринт как матрицу NxN.

Но т.к. задача в разделе "Теория графов", значит ее нужно как-то через графы решить. Так вот, хотел бы спросить, а как?

Каким образом представить граф, и какая идея решения будет?

Спасибо.

  • Проголосовать: нравится
  • -2
  • Проголосовать: не нравится

»
10 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

По факту, вы искали путь от одной вершины графа к другой. Вершины графа в данном случае -- проходимые клетки матрицы, а ребра существуют между вершинами, в которых соответствующие им клетки соседние. Отсюда и есть теория графов.

  • »
    »
    10 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо, я думал еще можно считать лабиринт как матрицу смежности, и просто обычным bfs'ом пройтись.

    А какие идеи есть, что бы не матрицей смежности представлять данные, а списком?

    Я просто хочу реализовать это так:

    сразу при чтении входных данных формировать список смежных вершин.

    • »
      »
      »
      10 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится

      Ну можно сделать функцию, принимающую координаты клетки и возвращающую число, уникальное для каждой клетки. Например, f(i,j)=i*(n+1)+j; Ну а дальше просто пробрасываем ребра между соседними вершинами...

    • »
      »
      »
      10 лет назад, # ^ |
      Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

      Так а зачем вам в явном виде хранить граф?. Вы же и так знаете, в какие вершины у вас есть ребра. Вы это и использовали, почти наверняка, в своем решении.. Вы знаете, что из вершины, соответствующей клетке (x,y), есть ребра в вершины, которые соответствуют клеткам (x+1,y),(x-1,y),(x,y+1),(x,y-1), если эти вершины существуют.

      • »
        »
        »
        »
        10 лет назад, # ^ |
          Проголосовать: нравится -8 Проголосовать: не нравится

        все равно не понимаю :)

        но мне как-то нужно хранить граф, что бы bfs применить..?

        • »
          »
          »
          »
          »
          10 лет назад, # ^ |
            Проголосовать: нравится +4 Проголосовать: не нравится

          Я же говорю. Вы и так bfs применяете. У вас клетки (x,y) -- это вершины, а ребра вы, находясь в клетке, высчитываете.