Ищем алгоритм, который поможет определить кратчайший путь от одного экрана терминала к другому - PullRequest
0 голосов
/ 16 ноября 2011

Я использую терминальный клиент для взаимодействия с мэйнфреймом. Весь интерфейс основан на концепции экранов. Пример рабочего процесса может выглядеть следующим образом:

  • Экран входа в систему: введите учетные данные, нажмите Enter
  • Экран меню: введите номер требуемого пункта меню (скажем, «6» для заметок), нажмите клавишу ввода
  • Memo Screen: введите номер счета, нажмите ввод
  • Экран добавления заметки: введите детали заметки и т. Д., Нажмите Enter, чтобы сохранить, F3, чтобы вернуться

Я написал приложение на python для автоматизации обработки записей через этот интерфейс терминала. Одна из трудностей, с которыми я сталкиваюсь, состоит в том, что существует много разных экранов, и мое приложение сейчас довольно глупо, как переходить с одного экрана на другой. Это может перейти от экрана входа в систему, чтобы добавить заметки. Но, если он обнаруживает себя на экране заметок и ему необходимо деактивировать учетную запись, он должен выйти из системы и войти снова, потому что он знает, как попасть на экран деактивации только с экрана входа в систему, а не с экрана добавления заметок.

Итак, я хотел бы создать «карту» в своем приложении, которая связывает каждый экран с «соседними» с ним экранами. Затем мне нужен алгоритм, который бы указывал, как добраться от любого экрана A к любому экрану B как можно быстрее.

Я уже настроил некоторые экранные объекты и "связал" их с экранами рядом с ними. Итак, я ищу какой-то алгоритм, который я могу реализовать, или библиотеку Python, которую я могу использовать, чтобы выполнить работу по вычислению маршрута от одного экрана к другому.

Редактировать: Я понимаю, что ищу какой-то алгоритм графа кратчайшего пути. В настоящее время меня бросает то, что у меня нет «расстояния», у меня просто есть узлы. Итак, я действительно не хочу наименьшее расстояние, я хочу наименьшее количество узлов.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2011

Поскольку я использую невзвешенный график, похоже, что самым простым подходом будет поиск в ширину:

http://en.wikipedia.org/wiki/Breadth-first_search

Редактировать: Iнашел библиотеку, которая делает все, что мне нужно:

http://networkx.lanl.gov/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html

0 голосов
/ 16 ноября 2011

Если вы создали топологию экранов, алгоритм A * должен работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...