헝 이 문제는 실패이다....
비주얼 스튜디오에서 돌렸을때는 적어도 내가 설정한 그래프에서는 돌아간다,,
하지만 백준에서 계속 시간초과가 나서 초기화 방식도 memset으로 바꾸어 보고 줄일 수 있는건 다 줄여본 것 같은데 그래도 시간초과가 났다,,,
그래서 찾아보니까 이 문제의 경우 인접행렬로 풀면 시간초과가 나기에 인접리스트나 간선리스트를 활용해야 한다고 한다..
나중에 수정본 올려보겠다.
#include<iostream>
#include <queue>
#include <memory.h>
#include <stack>
using namespace std;
#define MAX_VERTEX 1000
int map[MAX_VERTEX][MAX_VERTEX];
queue <int> BFS;
stack <int> DFS;
int visit[MAX_VERTEX];
int i, j;
void dfs(int vertex) {
int start = 1, tmp;
memset(visit, 0, sizeof(visit));
DFS.push(start);
while (!DFS.empty()) {
tmp = DFS.top();
if (visit[tmp] != 1)
cout << tmp << " ";
visit[tmp] = 1;
DFS.pop();
for (i = vertex; i >= 1; --i) {
if (i > tmp && map[tmp][i] == 1) {
DFS.push(i);
}
}
}
}
void bfs(int vertex) {
int start = 1, tmp;
memset(visit, 0, sizeof(visit));
BFS.push(start);
while (!BFS.empty())
{
tmp = BFS.front();
if (visit[tmp] != 1)
cout << tmp << " ";
visit[tmp] = 1;
BFS.pop();
for (i = 1; i <= vertex; i++) {
if (i > tmp && map[tmp][i] == 1) {
BFS.push(i);
}
}
}
}
int main() {
int vertex, edge, start;
cin >> vertex >> edge >> start;
int v1, v2;
for(i =0; i < MAX_VERTEX; ++i)
memset(map[i], 0, sizeof(int) * MAX_VERTEX);
for (i = 0; i < edge; i++) {
cin >> v1 >> v2;
map[v1][v2] = map[v2][v1] = 1;
}
dfs(vertex);
cout << endl;
bfs(vertex);
return 0;
}
'자윤이와고리즘 > Code' 카테고리의 다른 글
[백준]1934|최소공배수 (0) | 2019.05.07 |
---|---|
[백준]2609|최대공약수와최소공배수 (0) | 2019.05.07 |
[백준]9012|괄호 (0) | 2019.03.23 |
[백준]9372|상근이의여행 (0) | 2019.03.22 |
[백준]7576번|토마토 (0) | 2019.03.22 |