백준/탐색 15

[백준] C++ 4963번(섬의 개수)

#include using namespace std;void DFS(int a, int b, int row, int col);int arr[51][51];int main(void){ cin.tie(NULL); ios::sync_with_stdio(false); while(true) { int num1=0; int num2=0; cin>>num1>>num2; if(num1==0&&num2==0) { break; } for(int i=0; i>arr[i][j]; } } int count=0; for(int i=0; i-1&&a+i-1&& b+j섬의 개수를 찾는 문제이다. 이 문제에서 핵심은 대각선에 있는 땅은 이어져있다고 판단하는 것이다.처음에는 visited를 ..

백준/탐색 2024.07.02

C++ 11403(경로 찾기)

#include #define INF 987654321using namespace std;int arr[101][101];int main(void){ int a=0; cin>>a; for(int i=1; i>arr[i][j]; if(arr[i][j]==0) { arr[i][j]=INF; } } } for(int i=1; i이 문제는 경로가 있으면 1을 출력하고 없으면 0을 출력하는 문제이다.나는 플로이드 워샬 알고리즘을 이용하여 해결하였다. 일단 처음에 모든 경로를 INF로 초기화해준다.그리고 도시마다 경유 가능한 경로를 찾는다.for(int i=1; i이 부분은 첫 번째 for문이 경유하는 도시를 의미한다. 첫 번째 i가 1이면 1이라는 도시를 모든 도시가 경유하여 값을 재설정한..

백준/탐색 2024.06.28

[백준]C++ 14052번(연구소)

#include #include using namespace std;queue > Q;int arr[10][10];void BFS(int arr[10][10]);void DFS(int row, int col,int arr[10][10],int count);int max1=0;int a=0;int b=0;int main(void){ cin>>a>>b; for(int i=0; i>arr[i][j]; } } DFS(0,0,arr,0); cout-1&&j+1-1&&j-1-1&&i+1-1&&i-1max1) { max1=count; }}이 문제는 바이스러 문제이다. 꽤나 흥미롭다.일단 벽을 3개 무조건 세워야하는 조건이 있다.최대한 많은 안전구역을 어떻게 구할까? 나는 우선 2가지의 조건을 생각했다1.3..

백준/탐색 2024.06.27

[백준]C++ 11742(연결 요소의 개수)

#include #include using namespace std;vector v[1001];int visited[1001];void DFS(int a);int main(void){ int a=0; int b=0; cin>>a>>b; for(int i=0; i>num1>>num2; v[num1].push_back(num2); v[num2].push_back(num1); } int count=0; for(int i=1; i 이 문제는 처음에 연결 요소의 개수? 이게 무슨말인지 싶었다.이거만 이해하면 풀기는 어렵지 않다.나는 이 문제를 DFS로 풀었다.처음에 1부터 시작해서 깊게 탐색을 한다. 1과 연결된 부분은 모두 방문처리하고, 방문처리가 된 정점은 다시 방문하지 않는다.for(int i..

백준/탐색 2024.06.27