diff options
Diffstat (limited to 'main.py')
-rwxr-xr-x | main.py | 62 |
1 files changed, 62 insertions, 0 deletions
@@ -0,0 +1,62 @@ +import numpy as np +from collections import deque +import random +import networkx as nx +import matplotlib.pyplot as plt +import ot + +def adj_to_dist(adj_matrix): + n = len(adj_matrix) + distance_matrix = np.full((n, n), np.inf) + + for start in range(n): + # BFS + queue = deque([start]) + distances = [-1] * n + distances[start] = 0 + + while queue: + current = queue.popleft() + for neighbor in range(n): + if adj_matrix[current][neighbor] == 1 and distances[neighbor] == -1: + distances[neighbor] = distances[current] + 1 + queue.append(neighbor) + + for end in range(n): + if distances[end] != -1: + distance_matrix[start][end] = distances[end] + + return distance_matrix.astype(int) + +def plot_graph(adj_matrix): + G = nx.from_numpy_array(adj_matrix) + pos = nx.spring_layout(G, seed=42) + nx.draw(G, pos, with_labels=True, node_color='skyblue', edge_color='gray', + node_size=800, font_size=12, font_weight='bold') + + plt.title("Graph") + plt.savefig("graph.png") + print("Saved: 'graph.png' に保存しました") + +def gen_random_adj_matrix(n, edge_prob=0.3, seed=None): + # n : ノード数 + # edge_prob : 各辺が存在する確率 + # seed : ランダムシード + + if seed is not None: + np.random.seed(seed) + + # 上三角行列にランダムな0/1を生成(対角は0) + upper_tri = np.triu(np.random.rand(n, n) < edge_prob, k=1).astype(int) + + # 対称行列に変換(上三角 + 転置) + adj_matrix = upper_tri + upper_tri.T + + return adj_matrix + +def main(): + adj = gen_random_adj_matrix(6, edge_prob=0.5, seed=42) + plot_graph(adj) + +if __name__ == "__main__": + main() |