from collections import defaultdict from heapq import heappop, heappush def dijkstra(adj_list, start): dist = {node: float('inf') for node in adj_list} dist[start] = 0 heap = [(0, start)] while heap: curr_dist, curr_node = heappop(heap) if curr_dist > dist[curr_node]: continue for neighbor, weight in adj_list[curr_node]: new_dist = curr_dist + weight if new_dist < dist[neighbor]: dist[neighbor] = new_dist heappush(heap, (new_dist, neighbor)) return dist def avg_distance(W, E, connections): # build adjacency list for western and eastern stations adj_west = defaultdict(list) adj_east = defaultdict(list) for i in range(W-1): adj_west[i+1].append((i+2, 1)) adj_west[i+2].append((i+1, 1)) for i in range(E-1): adj_east[i+1].append((i+2, 1)) adj_east[i+2].append((i+1, 1)) # calculate shortest distances from each western and eastern station to all others dist_west = {} dist_east = {} for i in range(1, W+1): dist_west[i] = dijkstra(adj_west, i) for i in range(1, E+1): dist_east[i] = dijkstra(adj_east, i) # calculate average distance for each option avg_dist = [] for c in connections: west, east = c dist = 0 count = 0 for i in range(1, W+1): for j in range(1, E+1): if (i,j) != c: dist += dist_west[i][west] + dist_east[j][east] + 1 count += 1 avg_dist.append(dist/count) return avg_dist # read input T = int(input()) for case in range(1, T+1): W, E, C = map(int, input().split()) connections = [tuple(map(int, input().split())) for _ in range(C)] result = avg_distance(W, E, connections) print(f"Case #{case}: {' '.join(f'{x:.6f}' for x in result)}") from collections import defaultdict from heapq import heappop, heappush def dijkstra(adj_list, start): dist = {node: float('inf') for node in adj_list} dist[start] = 0 heap = [(0, start)] while heap: curr_dist, curr_node = heappop(heap) if curr_dist > dist[curr_node]: continue for neighbor, weight in adj_list[curr_node]: new_dist = curr_dist + weight if new_dist < dist[neighbor]: dist[neighbor] = new_dist heappush(heap, (new_dist, neighbor)) return dist def avg_distance(W, E, connections): # build adjacency list for western and eastern stations adj_west = defaultdict(list) adj_east = defaultdict(list) for i in range(W-1): adj_west[i+1].append((i+2, 1)) adj_west[i+2].append((i+1, 1)) for i in range(E-1): adj_east[i+1].append((i+2, 1)) adj_east[i+2].append((i+1, 1)) # calculate shortest distances from each western and eastern station to all others dist_west = {} dist_east = {} for i in range(1, W+1): dist_west[i] = dijkstra(adj_west, i) for i in range(1, E+1): dist_east[i] = dijkstra(adj_east, i) # calculate average distance for each option avg_dist = [] for c in connections: west, east = c dist = 0 count = 0 for i in range(1, W+1): for j in range(1, E+1): if (i,j) != c: dist += dist_west[i][west] + dist_east[j][east] + 1 count += 1 avg_dist.append(dist/count) return avg_dist # read input T = int(input()) for case in range(1, T+1): W, E, C = map(int, input().split()) connections = [tuple(map(int, input().split())) for _ in range(C)] result = avg_distance(W, E, connections) print(f"Case #{case}: {' '.join(f'{x:.6f}' for x in result)}")