summaryrefslogtreecommitdiff
path: root/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'main.py')
-rwxr-xr-xmain.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/main.py b/main.py
new file mode 100755
index 0000000..edf9aff
--- /dev/null
+++ b/main.py
@@ -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()