Spaces:
Sleeping
Sleeping
| import networkx as nx | |
| import gradio as gr | |
| def find_shortest_path(graph, start, end): | |
| """ | |
| Find the shortest path in a graph using Dijkstra's algorithm. | |
| Parameters: | |
| graph (dict): A dictionary representing the graph where keys are node names and values are dictionaries of neighboring nodes and their distances. | |
| start (str): The starting node. | |
| end (str): The destination node. | |
| Returns: | |
| list: The shortest path from start to end. | |
| float: The total distance of the shortest path. | |
| """ | |
| G = nx.DiGraph() | |
| # Add edges to the graph | |
| for node, neighbors in graph.items(): | |
| for neighbor, distance in neighbors.items(): | |
| G.add_edge(node, neighbor, weight=distance) | |
| # Find the shortest path using Dijkstra's algorithm | |
| shortest_path = nx.dijkstra_path(G, start, end) | |
| total_distance = nx.dijkstra_path_length(G, start, end) | |
| return shortest_path, total_distance | |
| def combine_maps(city_map, jam_map): | |
| """ | |
| Combine city map and jam map by adding their weights. | |
| Parameters: | |
| city_map (dict): A dictionary representing the city map where keys are node names and values are dictionaries of neighboring nodes and their distances. | |
| jam_map (dict): A dictionary representing the jam map where keys are node names and values are dictionaries of neighboring nodes and their jam factors. | |
| Returns: | |
| dict: A combined map with summed weights. | |
| """ | |
| combined_map = {} | |
| for node in city_map: | |
| combined_map[node] = {} | |
| for neighbor in city_map[node]: | |
| combined_map[node][neighbor] = city_map[node][neighbor] + jam_map[node][neighbor] | |
| return combined_map | |
| # Example graph representing the city map | |
| city_map = { | |
| '重症外傷センター': {'池袋': 2, '中目黒': 5}, | |
| '池袋': {'重症外傷センター': 2, '中目黒': 3, '六本木': 4}, | |
| '中目黒': {'重症外傷センター': 5, '池袋': 3, '六本木': 2, '銀座': 6}, | |
| '六本木': {'池袋': 4, '中目黒': 2, '銀座': 1}, | |
| '銀座': {'中目黒': 6, '六本木': 1} | |
| } | |
| # Example graph representing the jam map | |
| jam_map = { | |
| '重症外傷センター': {'池袋': 5, '中目黒': 2}, | |
| '池袋': {'重症外傷センター': 5, '中目黒': 4, '六本木': 3}, | |
| '中目黒': {'重症外傷センター': 5, '池袋': 6, '六本木': 3, '銀座': 2}, | |
| '六本木': {'池袋': 1, '中目黒': 3, '銀座': 5}, | |
| '銀座': {'中目黒': 3, '六本木': 4} | |
| } | |
| # Combine city map and jam map | |
| combined_map = combine_maps(city_map, jam_map) | |
| def shortest_path_interface(start_point, destination): | |
| shortest_path, total_distance = find_shortest_path(combined_map, start_point, destination) | |
| return f"一番短い{start_point}から{destination}までの経路は: {shortest_path}\nトータルの距離は{total_distance}ユニットです。" | |
| # Create Gradio interface | |
| iface = gr.Interface( | |
| fn=shortest_path_interface, | |
| inputs=[gr.Textbox(label="出発地",value="銀座"),gr.Textbox(label="到着地",value="重症外傷センター")], | |
| outputs="text", | |
| title="救急搬送ルートの最適化", | |
| description="出発地点と目的地を入力して、最短経路を計算します。" | |
| ) | |
| # Launch the interface | |
| iface.launch() | |