방향그래프가 주어지면 1번 정점에서 N번 정점으로 가는 모든 경로의 가지 수를 출력하는 프 로그램을 작성하세요.
아래 그래프에서 1번 정점에서 5번 정점으로 가는 가지 수는 아래와 같이 6 가지 입니다.
1 2 3 4 5
1 3 4 2 5
1 3 4 5
1 4 2 5
1 4 5
▣ 입력설명
첫째 줄에는 정점의 수 N(2<=N<=20)와 간선의 수 M가 주어진다. 그 다음부터 M줄에 걸쳐 연 결정보가 주어진다.
▣ 출력설명
총 가지수를 출력한다.
▣ 입력예제 1
5 9
1 2
1 3
1 4
2 1
2 3
2 5
3 4
4 2
4 5
▣ 출력예제 1
6
def DFS(L):
global step, cnt
if L >= n:
cnt += 1
print('cnt:{}, step:{}'.format(cnt, step)) # 라우팅 디버깅용
return
else:
for i in range(1, n+1):
if ch[i] == 0 and g[L][i] == 1:
ch[i] = i
step.append(i) # 라우팅 디버깅용
DFS(i) # 핵심은 레벨탐색 처럼하지만 숫자를 직접 넘긴다
step.pop() # 라우팅 디버깅용
ch[i] = 0
if __name__ == '__main__':
n, m = map(int, input().split())
g = [[0]*(n+1) for i in range(n+1)]
ch = [0]*(n+1)
cnt = 0
step = [] # 라우팅 디버깅용
for i in range(m):
a, b = (map(int, input().split()))
g[a][b] = 1
ch[1] = 1
step.append(1) # 라우팅 디버깅용
DFS(1)
print(cnt)
'Algorithm > Python' 카테고리의 다른 글
057 - 휴가(삼성 SW역량평가 기출문제 : DFS활용) (0) | 2023.08.31 |
---|---|
056 - 최대점수 구하기(DFS) (2) | 2023.08.31 |
054 - 인접행렬(가중치 방향그래프) (0) | 2023.08.29 |
053 - 수들의 조합 (0) | 2023.08.29 |
052 - 조합 구하기 (0) | 2023.08.29 |