인프런 커뮤니티 질문&답변

han님의 프로필 이미지
han

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

64. 경로탐색 (그래프 DFS : Depth First Search)

Time limit가 걸리는데 어떻게 해결해야 할까요?

작성

·

159

0

#include <stdio.h>
#include <vector>
using namespace std;

int n, m;
int answer = 0;

void solution(vector<vector<int>> & arr, vector<int> & visited, int current){
	if(current == n){
	   answer++;
	   return;
	}
	
   	visited[current - 1] = 1;
   	for(int i=0;i<n;i++){
   	   if(arr[current-1][i]!=0 && visited[i] == 0){
   	     visited[i] = 1;
   	     solution(arr, visited, i+1);
	     visited[i] = 0;	
	   }	
	}
	visited[current - 1] = 0;
}

int main(void){
    //freopen("input.txt", "rt", stdin);
    int start, end;
    scanf("%d %d", &n, &m);
    vector<vector<int>> arr(n, vector<int>(n));
    vector<int> visited(n);
    for(int i=0;i<n;i++){
    	for(int j=0;j<n;j++){
    	  scanf("%d %d", &start, &end);
    	  arr[start-1][end-1] = 1; 
	}
     }
    solution(arr, visited, 1);
    printf("%d", answer);
    return 0;
}

안녕하세요. 다름이 아니라 수업 듣기 전 짠 코드를 이용해 채점 프로그램을 실행시키면 모든 case에 대해 time limit가 나와서 질문드립니다. 위 코드에 어떤 문제가 있을까요? 채점파일 내에 있는 input.txt 입력받고 실행시키면 전부 정답으로 나옵니다.

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

안녕하세요^^

입력을 잘 못 받고 있습니다. 아래 처럼 간선 정보를 입력받아야 합니다.

for(int i=0;i<m;i++){
    scanf("%d %d", &start, &end);
    arr[start-1][end-1] = 1; 
}
han님의 프로필 이미지
han

작성한 질문수

질문하기