hyunjin

[C++][BOJ/DFS와 BFS/1260] fill, memset 본문

알고리즘 연습/백준

[C++][BOJ/DFS와 BFS/1260] fill, memset

_h.j 2021. 2. 18. 22:51
728x90

백준 1260  

 

소스 코드

#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));

 

참고 

fill

memset

 

728x90