요즘 BFS를 공부중이라 해당 카테고리에 나와있는 문제를 푼 것인데, 내가 생각했을땐 DFS여야 최단 거리가 나오는거 같아 내 멋대로 바꾸었다..

하지만 이것도,,시간초과가 뜬다...50%정도 채점하다가,,,,,ㅜ

주어진 입력에서는 같은 결과가 나오지만 완전히 맞았는지는 불투명하다..



시간초과 문제가 반복되는걸로 보아 dfs, bfs등에서 시간초과를 해결할 방법을 찾아보아야 겠다ㅜ0ㅜ


#include<iostream>

#include<memory.h>

#include <stack>

using namespace std;

#define MAX_NATION 1000

int nat[MAX_NATION][MAX_NATION];

stack<int>s;

int start = 1, cnt;

int DFS(int total) {

int i, j, tmp;


s.push(start);

int first = start;

while (!s.empty()) {

tmp = s.top();

cnt++;

s.pop();

for (j = 0; j < total; j++) {

if (j > tmp && nat[tmp][j] == 1) {

if (j == first)

return cnt;

s.push(j);

}

}

}

return cnt;

}

int main() {

int test_case, nation, flight, i, j, k, tmp;

int v1, v2;

cin >> test_case;

for (i = 0; i < MAX_NATION; i++)

memset(nat[i], 0, sizeof(nat[i]));

for (i = 0; i < test_case; i++) {

cnt = 0;

cin >> nation >> flight;

for (j = 0; j < flight; j++) {

cin >> v1 >> v2;

nat[v1][v2] = 1;

}

cout << DFS(nation) << endl;

}

}

'자윤이와고리즘 > Code' 카테고리의 다른 글

[백준]1934|최소공배수  (0) 2019.05.07
[백준]2609|최대공약수와최소공배수  (0) 2019.05.07
[백준]9012|괄호  (0) 2019.03.23
[백준]7576번|토마토  (0) 2019.03.22
[백준]1260번|DFS와BFS  (0) 2019.03.22

+ Recent posts