回答編集履歴
2
コード全体の追記
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
コードの追加
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
|
+
|