PS/깊이 우선 탐색, 너비 우선 탐색[DFS, BFS] 34

백준 7576 토마토(c++)

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net #include #include #include #define max 1001 using namespace std; int n,m; int tomato[max][max]; queueq; bool visited[max][max]; int mov[4][2] = {{-1,0},{1,0},{0,1},{0,-1}}; void bfs() { visited[max][max] = {false};..

17086 아기 상어 2(c++)

https://www.acmicpc.net/problem/17086 17086번: 아기 상어 2 첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸과 상어의 수가 각각 한 개 이상인 입력만 www.acmicpc.net #include #include #include #include #include using namespace std; int n,m; int ans=0; int board[51][51]; int mov[8][2] = {{-1,0},{1,0},{0,1},{0,-1},{1,1},{-1,-1},{1,-1},{-1,1}}; int bfs(int a,int b) { bool v..

백준 1260 DFS와 BFS(c++)

https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net #include #include #include #include #define max 1001 using namespace std; int n,m; int v; int board[max][max]; bool visited[max] = {false}; void dfs(int node) { visited[node] = true; cout

백준 14502 연구소(c++)

https://www.acmicpc.net/problem/14502 14502번: 연구소 인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다. 연구소는 크 www.acmicpc.net #include #include #include #include using namespace std; int n,m; int map[8][8]; int mov[4][2] = {{-1,0},{1,0},{0,1},{0,-1}}; int ret = 0; void bfs(){ bool visited[8][8] = {false}; queue q; int backup[8][8]; for(int i=0;i

백준 15686 치킨 배달(c++)

https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net #include #include #include #include #include using namespace std; vector house, chicken ,pick; int n,m,t; int ret = 100000000; void dfs(int pos) { if(pick.size()==m){ int candi = 0; for(int i=0;in>>m; for(int i=..

백준 7562 나이트의 이동(c++)

https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net #include #include #include #define max 301 using namespace std; queueq; int board[max][max]; bool visited[max][max]; int mov [8][2] = {{2,1},{1,2},{-2,1},{-1,2},{-2,-1},{-1,-2},{1,-2},{2,-1}}; // 말의 이동 int main() { int t; ci..

백준 1012 유기농 배추(c++)

https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net #include #include #include #define max 51 using namespace std; int mov[4][2] = {{-1,0},{1,0},{0,-1},{0,1}}; int board[max][max]; bool visited[max][max] = {0}; int n,m,x,y; int cnt=0; void dfs(int a,int b) { visited[a][b] = true; f..

백준 4963 섬의 개수(c++)

https://www.acmicpc.net/problem/4963 4963번: 섬의 개수 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 지도의 너비 w와 높이 h가 주어진다. w와 h는 50보다 작거나 같은 양의 정수이다. 둘째 줄부터 h개 줄에는 지도 www.acmicpc.net #include #include #include #define max 51 using namespace std; int w,h,n,m; int board[max][max]; bool visited[max][max] = {0}; int dir[8][2] = {{-1,0},{1,0},{0,-1},{0,1},{1,1},{-1,-1},{1,-1},{-1,1}}; //상하좌우 대각선 이동 void d..

백준 11724 연결 요소의 개수(c++)

https://www.acmicpc.net/problem/11724 11724번: 연결 요소의 개수 첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주 www.acmicpc.net 이 문제는 dfs, bfs의 기본 문제이다. #include #include #include #include #include #define max 1001 int board[max][max]; bool visited[max] = {0}; int cnt=0; int n,m; using namespace std; //void dfs(int..

백준 2606 바이러스(c++)

https://www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어 www.acmicpc.net bfs #include #include #include #include #define max 101 using namespace std; int n, com; int cnt=0; int graph[max][max]; void bfs(int node){ bool visited[max]= {false}; queuemyqueue; visited[node]=true; myqueue.push(node); whi..