回答編集履歴

2

コード全体の追記

2023/10/19 14:45

投稿

little_street
little_street

スコア387

test CHANGED
@@ -64,3 +64,38 @@
64
64
  writer.writerows(result)
65
65
  ```
66
66
 
67
+ (追記2)
68
+ 結果を CSV ファイルへ保存する部分も含めたコード全体を示します。
69
+
70
+ 処理する 2000x2000 の CSV ファイルの「コピー」を作業フォルダに移動し,その名前を `data_2000.csv` に変更してから実行してください。
71
+
72
+ ```Python
73
+ import csv
74
+
75
+ def warshall_floyd(dist):
76
+ n = len(dist)
77
+ for k in range(n):
78
+ # print(k)
79
+ for i in range(n):
80
+ for j in range(n):
81
+ dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])
82
+ return dist
83
+
84
+ def read_distance_matrix_from_csv(filename):
85
+ with open(filename, 'r', newline='') as csvfile:
86
+ reader = csv.reader(csvfile)
87
+ return [row[1:] for i, row in enumerate(reader) if i > 0]
88
+
89
+ file_name = 'data_2000.csv'
90
+ INF = '100000'
91
+
92
+ d_csv = read_distance_matrix_from_csv(file_name)
93
+ d_str = [[INF if s == '' else s for s in row] for row in d_csv]
94
+ d_int = [[int(s) for s in row] for row in d_str]
95
+
96
+ result = warshall_floyd(d_int)
97
+
98
+ with open('result_' + file_name, 'w', newline='') as csvfile:
99
+ writer = csv.writer(csvfile)
100
+ writer.writerows(result)
101
+ ```

1

コードの追加

2023/10/18 15:41

投稿

little_street
little_street

スコア387

test CHANGED
@@ -50,3 +50,17 @@
50
50
  # [47, 37, 45, 16, 0]
51
51
  ```
52
52
 
53
+ (追記)
54
+ 結果を CSV ファイルに保存するコードを追記します。
55
+
56
+ なお,最初の2行はヘッダとインデックスを追加するためのものです。必要なければコメントアウト等をしてください。
57
+
58
+ ```Python
59
+ result = [[i + 1 for i, _ in enumerate(result)]] + result
60
+ result = [[i if i > 0 else ''] + row for i, row in enumerate(result)]
61
+
62
+ with open('result_' + file_name, 'w', newline='') as csvfile:
63
+ writer = csv.writer(csvfile)
64
+ writer.writerows(result)
65
+ ```
66
+