teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

path と visited は同じなので、path を削除

2020/12/10 00:19

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -41,13 +41,13 @@
41
41
  ```Python
42
42
  from collections import defaultdict
43
43
 
44
- def dfs(start, visited, path):
44
+ def dfs(start, visited):
45
45
  if len(visited) == n:
46
- ans.append(path)
46
+ ans.append(visited)
47
47
  else:
48
48
  for c in graph[start]:
49
49
  if c not in visited:
50
- dfs(c, visited + [c], path + [c])
50
+ dfs(c, visited + [c])
51
51
 
52
52
  n, m = map(int, input().split())
53
53
  tree = defaultdict(list)
@@ -58,7 +58,7 @@
58
58
 
59
59
  graph = dict(tree)
60
60
  ans = []
61
- dfs(1, [1], [1])
61
+ dfs(1, [1])
62
62
  print(len(ans))
63
63
  print(ans)
64
64
  ```

2

説明の修正

2020/12/10 00:19

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  1 4
10
10
  2 4
11
11
  3 4
12
- この場合、[1, 2, 3, 4] または [1, 3, 4, 2] の 2通りになるはずなのに、
12
+ この場合、[1, 2, 4, 3] または [1, 3, 4, 2] の 2通りになるはずなのに、
13
13
  質問のコードではそうなりません。
14
14
 
15
15
  私なら次のようなコードを書きます。

1

パスを表示するコードを追加

2020/12/09 18:25

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -35,4 +35,30 @@
35
35
  ans = []
36
36
  dfs(1, [1])
37
37
  print(len(ans))
38
+ ```
39
+ **追記**
40
+ 次のようにすると、見つかったすべてのパスを表示できます。
41
+ ```Python
42
+ from collections import defaultdict
43
+
44
+ def dfs(start, visited, path):
45
+ if len(visited) == n:
46
+ ans.append(path)
47
+ else:
48
+ for c in graph[start]:
49
+ if c not in visited:
50
+ dfs(c, visited + [c], path + [c])
51
+
52
+ n, m = map(int, input().split())
53
+ tree = defaultdict(list)
54
+ for _ in range(m):
55
+ a, b = map(int, input().split())
56
+ tree[a].append(b)
57
+ tree[b].append(a)
58
+
59
+ graph = dict(tree)
60
+ ans = []
61
+ dfs(1, [1], [1])
62
+ print(len(ans))
63
+ print(ans)
38
64
  ```