티스토리 뷰
문제
방향 그래프가 주어지면 1번 정점에서 n번 정점으로 가는 모든 경로의 가지수를 출력하는 프로그램 작성.
참고) 경로란? 방문한 노드는 중복해서 방문하지 않는다.
입력
5 9
1 2
1 3
1 4
2 1
2 3
2 5
3 4
4 2
4 5
출력
6
생각 포인트
- 한번 방문한 노드는 다시 방문하면 안되기에 방문한 노드를 check 할 check list를 사용하자.
- 1번 노드부터 시작할것이니 dfs(1)로 시작하면서 check list에 1번을 check
- 인접행렬은 옆으로 갈 수 있지만 check list를 확인하여 check 되어 있으면 가지 않는다.
- 백트래킹을 할 땐 다시 check를 풀어주어야 한다.
Solution
n, m = map(int, input().split())
graph = [[0] * (n+1) for _ in range(n+1)]
# path = [] # 경로까지 출력하기 위해 선언. 문제만 푸는데는 필수적이지 않음.
check = [0] * (n+1)
check[1] = 1
# path.append(1)
cnt = 0
for _ in range(m):
row, col = map(int, input().split())
graph[row][col] = 1
def dfs(v):
global cnt
if v == n:
cnt += 1
# for x in path:
# print(x, end=' ')
# print()
else:
for i in range(1, n+1):
# v번째 노드에서 i번째 인덱스로 갈 수 있다면 graph[v][i] = 1
if graph[v][i] == 1 and check[i] == 0:
check[i] = 1
# path.append(i)
dfs(i)
# back 하는 지점. check 풀어주기.
check[i] = 0
# path.pop()
dfs(1)
print(cnt)
'Problem solution' 카테고리의 다른 글
[leetcode] valid anagram (0) | 2022.07.28 |
---|---|
순열 구하기 (0) | 2022.07.28 |
동전 교환 (0) | 2022.07.27 |
중복순열 구하기 (0) | 2022.07.27 |
바둑이 승차 (0) | 2022.07.26 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 빅데이터를지탱하는기술
- CSAPP
- Hadoop
- 백준
- OS
- sqoop
- kafka
- 이코테
- elasticsaerch
- Elasticsearch
- DFS
- Algorithm
- BOJ
- oozie
- logstash
- kubernetes
- GROK
- heapq
- DP
- 프로그래머스
- cka
- 네트워크
- HDFS
- Flutter
- Python
- 파이썬
- 빅데이터
- Espher
- CS
- mahout
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함