def main():
    parser = argparse.ArgumentParser(
        description='Run your desired search algorithm on a graph :)')
    parser.add_argument('--algorithm',
                        type=str,
                        help='BFS / DFS / UniformCost / A* / GreedyBestFirst',
                        required=True)
    parser.add_argument('--graphFile',
                        type=str,
                        help='The path to .txt file containing your graph.',
                        required=True)
    parser.add_argument(
        '--heuristicFile',
        type=str,
        help='The path to .txt file containing your heuristics.',
        required=False,
        default=None)
    parser.add_argument('--startNode', type=str, required=True)
    parser.add_argument('--goalNode', type=str, required=True)
    parser.add_argument(
        '--treeSearch',
        help=
        'Use this switch if you want to perform tree search rather than graph search',
        action='store_true')
    args = parser.parse_args()
    algo = args.algorithm
    graph_file = args.graphFile
    heu_file = args.heuristicFile
    start_node = args.startNode
    goal_node = args.goalNode
    graph_search = not args.treeSearch
    gm = GraphMaker(graph_file, heu_file)
    heuristic_dict = gm.get_heuristic_dictionary()
    adjacency_list = gm.get_adjacency_list()
    h = Handler(algo, adjacency_list, heuristic_dict, start_node, goal_node,
                graph_search)
    h.handle()