알고리즘 연습/백준
[C++][BOJ/DFS와 BFS/1260] fill, memset
_h.j
2021. 2. 18. 22:51
728x90
소스 코드
#include <bits/stdc++.h>
#define MAX 1001
using namespace std;
void BFS(int s , vector<int> g[], bool visit[]){
queue<int> q;
q.push(s);
visit[s]=true;
while( !q.empty() ){
int current = q.front(),next;
q.pop();
cout<<current<<" ";
for(int i = 0 ; i <g[current].size();i++){
next = g[current][i];
if(!visit[next]){
q.push(next);
visit[next]=true;
}
}
}
}
void DFS(int start,vector<int> g[], bool visit[]){
stack<int> s;
s.push(start);
visit[start]=true;
cout<<start<<" ";
while( !s.empty() ){
int current = s.top(),next;
s.pop();
for(int i = 0 ; i < g[current].size();i++ ){
next = g[current][i];
if(!visit[next]){
s.push(current);
s.push(next);
cout<<next<<" ";
visit[next]=true;
break;
}
}
}
}
int main(){
ios::sync_with_stdio(0); cin.tie(0);cout.tie(0);
int s , m ,n;
cin >>n>>m>>s;
vector<int> g[n+1];
bool visit[n+1];
for(int i = 0 ; i < m ; i++ ){
int u,v;
cin >>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
for(int i = 1; i<=n ; i++ ) sort(g[i].begin(),g[i].end());
fill(visit,visit + n +1,false);
DFS(s,g,visit);
cout<<"\n";
fill(visit,visit + n +1,false);
BFS(s,g,visit);
return 0;
}
DFS에서 출력하는 위치 조심.
std::fill
fill( 시작 주소, 끝 주소 , val )
단 끝 주소는 포함하지 않음.
bool visit[n+1];
fill(visit,visit + n +1,false);
memset
memset( 배열 시작 주소, 값, 배열 크기 )
단 , 배열값을 0, -1로 채울 때만 사용해야함.
int arr[10];
memset(arr, 0 , sizeof(arr));
참고
728x90