
λ¨Όμ λ€μ΄ μ¨ λ°μ΄ν°κ° λμ€μ λκ°λ νμ(μ μ νμΆ FILO)μ μλ£κ΅¬μ‘°
μ ꡬμ μΆκ΅¬κ° λμΈν ννλ‘ μ€νμ μκ°νν μ μμ΅λλ€.
stl stack μ΄μ©
#include <stack>
#include <iostream>
using namespace std;
stack<int> s;
int main()
{
s.push(5);
s.push(2);
s.push(3);
s.push(7);
s.pop();
s.push(1);
s.push(4);
s.pop();
while (!s.empty()){
cout << s.top() << ' ';
s.pop();
}
}
λ¨Όμ λ€μ΄ μ¨ λ°μ΄ν°κ° λ¨Όμ λκ°λ νμ(μ μ μ μΆ FIFO)μ μλ£κ΅¬μ‘°
νλ μ ꡬμ μΆκ΅¬κ° λͺ¨λ λ«λ € μλ ν°λκ³Ό κ°μ νν
stl queue μ΄μ©
#include <iostream>
#include <queue>
using namespace std;
queue<int> q;
int main(){
q.push(5);
q.push(2);
q.push(3);
q.push(7);
q.pop();
q.push(1);
q.push(4);
q.pop();
while (!q.empty())
{
cout << q.front() << ' ';
q.pop();
}
}
μ¬κ· ν¨μλ μκΈ° μμ μ λ€μ νΈμΆνλ ν¨μλ₯Ό μλ―Έν©λλ€.
λ°λμ μ’ λ£ μ‘°κ±΄μ λͺ μν΄μΌνλ€
μ»΄ν¨ν°κ° ν¨μλ₯Ό μ°μμ μΌλ‘ νΈμΆνλ©΄ μ»΄ν¨ν° λ©λͺ¨λ¦¬ λ΄λΆμ μ€ν νλ μμ μμΈλ€
κΉμ΄ μ°μ νμμ΄λΌκ³ λ λΆλ₯΄λ©° κ·Έλνμμ κΉμ λΆλΆμ μ°μ μ μΌλ‘ νμνλ μκ³ λ¦¬μ¦
μ€ν μλ£κ΅¬μ‘°(νΉμ μ¬κ· ν¨μ)λ₯Ό μ΄μ©νλ€
- νμ μμ λ Έλλ₯Ό μ€νμ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬λ₯Ό ν©λλ€.
- μ€νμ μ΅μλ¨ λ Έλμ λ°©λ¬Ένμ§ μμ μΈμ ν λ Έλκ° νλλΌλ μμΌλ©΄ κ·Έ λ Έλλ₯Ό μ€νμ λ£κ³ λ°©λ¬Έμ²λ¦¬ν©λλ€. λ°©λ¬Ένμ§ μμ μΈμ λ Έλκ° μμΌλ©΄ μ€νμμ μ΅μλ¨ λ Έλλ₯Ό κΊΌλ λλ€.
- λ μ΄μ 2λ²μ κ³Όμ μ μνν μ μμ λκΉμ§ λ°λ³΅ν©λλ€
DFS λ°©μμ μΈμ ν λ
Έλμ μμμ νκ³ λκΉμ§ μνν ν, λ€μ λμμμ λ€λ₯Έ νμ λ€μ μμμ νκ³ λ΄λ €κ°λ©° μννλ€
μ€μ νμ μμλ
A - B - D - E - F - C - G - H - I - J
μμ
#include<iostream>
#include<vector>
using namespace std;
bool visited[9];
vector<int> graph[9];
void dfs(int x)
{
visited[x] = true;
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++)
{
int y = graph[x][i];
if (!visited[y])
dfs(y);
}
}
λ°©λ¬Έν λ Έλλ trueλ‘ νμνκ³ κ·Έλνλ₯Ό νμνλ€
λλΉ μ°μ νμμ΄λΌκ³ λ λΆλ¬λ©°, κ·Έλνμμ κ°κΉμ΄ λ ΈλλΆν° μ°μ μ μΌλ‘ νμνλ μκ³ λ¦¬μ¦μ λλ€.
BFSλ ν μλ£κ΅¬μ‘°λ₯Ό μ΄μ©νλ€.
- νμ μμ λ Έλλ₯Ό νμ μ½μ νκ³ λ°©λ¬Έ μ²λ¦¬λ₯Ό ν©λλ€.
- νμμ λ Έλλ₯Ό κΊΌλΈ λ€μ ν΄λΉ λ Έλμ μΈμ λ Έλ μ€μμ λ°©λ¬Ένμ§ μμ λ Έλλ₯Ό λͺ¨λ νμ μ½μ νκ³ λ°©λ¬Έμ²λ¦¬ν©λλ€.
- λ μ΄μ 2λ²μ κ³Όμ μ μνν μ μμ λκΉμ§ λ°λ³΅ν©λλ€.
BFS λ°©μμ ν λ¨κ³μ λ΄λ €κ°λ©΄μ, ν΄λΉ λ
Έλμ κ°μ λ 벨μ μλ λ
Έλλ€μ λ¨Όμ μννλ€.
μ€μ νμ μμλ
A - B - C - D - G - H - I - E - F - J
μμ
#include<iostream>
#include<vector>
#include <queue>
using namespace std;
bool visited[9];
vector<int> graph[9];
void bfs(int start)
{
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty())
{
int x = q.front();
q.pop();
cout << x << " ";
for (int i = 0; i < graph[x].size(); i++)
{
int y = graph[x][i];
if (!visited[y])
{
q.push(y);
visited[y] = true;
}
}
}
}
N X N ν¬κΈ°μ μΌμ νμ΄ μλ€. ꡬλ©μ΄ λ«λ € μλ λΆλΆμ 0, μΉΈλ§μ΄κ° μ‘΄μ¬νλ λΆλΆμ 1λ‘ νμλλ€. ꡬλ©μ΄ λ«λ € μλ λΆλΆλΌλ¦¬ μ, ν, μ’, μ°λ‘ λΆμ΄ μλ κ²½μ° μλ‘ μ°κ²°λμ΄ μλ κ²μΌλ‘ κ°μ£Όνλ€. μ΄λ μΌμ νμ λͺ¨μμ΄ μ£Όμ΄μ‘μ λ μμ±λλ μ΄ μμ΄μ€ν¬λ¦Όμ κ°μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€. λ€μμ 4 X 5 μΌμ ν μμμμλ μμ΄μ€ν¬λ¦Όμ΄ μ΄ 3κ° μμ±λλ€.
μμ§ν κ°λ λͺ»μ‘μλ€ λͺμλΆκ°μ κ³ λ―Όλμ κ·Έλ₯ ν΄λ‘ μ½λ©μ νμλ€
μ λ§ κΈ°λ°νκ±° κ°λ€ μμ μ
#include <iostream>
using namespace std;
int check[1001][1001];
int n, m;
bool dfs(int x, int y)
{
if (x <= -1 || x >= n || y <= -1 || y >= m)
return false;
if (check[x][y] == 0)
{
check[x][y] = 1;
dfs(x - 1, y);
dfs(x, y - 1);
dfs(x + 1, y);
dfs(x, y + 1);
return true;
}
return false;
}
int main()
{
cin >> n >> m;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> check[i][j];
}
int res = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (dfs(i, j))
res += 1;
}
}
cout << res << endl;
}
μ΄κ±° 보μλ§μ μμΌλλ λ¬Έμ κ° μκ°μ΄ λ¬λ€
λλΉμ΄λ N X M ν¬κΈ°μ μ§μ¬κ°ν ννμ λ―Έλ‘μ κ°ν μλ€. λ―Έλ‘μλ μ¬λ¬ λ§λ¦¬μ κ΄΄λ¬Όμ΄ μμ΄ μ΄λ₯Ό νΌν΄ νμΆν΄μΌ νλ€. λλΉμ΄μ μμΉλ (1, 1)μ΄κ³ λ―Έλ‘μ μΆκ΅¬λ (N, M)μ μμΉμ μ‘΄μ¬νλ©° νλ²μ ν μΉΈμ© μ΄λν μ μλ€. μ΄λ κ΄΄λ¬Όμ΄ μλ λΆλΆμ 0μΌλ‘, κ΄΄λ¬Όμ΄ μλ λΆλΆμ 1λ‘ νμλμ΄ μ΄γ γ λ€. λ―Έλ‘λ λ°λμ νμΆν μ μλ ννλ‘ μ μλλ€. μ΄λ λλΉμ΄κ° νμΆνκΈ° μν΄ μμ§μ¬μΌ νλ μ΅μ μΉΈμ κ°μλ₯Ό ꡬνμμ€. μΉΈμ μ λλ μμ μΉΈκ³Ό λ§μ§λ§ μΉΈμ λͺ¨λ ν¬ν¨ν΄μ κ³μ°νλ€.
λ¬Έμ λ₯Ό 보μλ§μ μ λ²μ 곡λΆνλ κ²μκ°λ°λ¬Έμ κ° μκ°λ¬λ€ κ·Έλμ μ²μμ μκ°ν μμ΄λμ΄λ λλΉμ΄κ° μμ§μΌ μ μλ λ°©ν₯μ μλ₯Ό νκ³ λ§μ½ κ·Έ λ°©ν₯μΌλ‘ μμ§μμλ κ° μ μλκ³³μ΄λΌλ©΄ μΉ΄μ΄νΈλ₯Ό μ¦κ°μμΌμ£Όκ³ μλλΌλ©΄ κ·Έ λ
Έλλ₯Ό μ£½μ¬λ²λ¦¬λ μμΌλ‘ dfsλ₯Ό μκ°μ νλ€
μλ₯Ό λ€μ΄ μ΄λ¬ν κ·Έλνκ° μλ€λ©΄ 첫 μμμ§μ μμ μμ§μΌ μ μλ κ³³μ μ€λ₯Έμͺ½κ³Ό μλ λ°μ μλ€ κ·Όλ° μλλ 0μ΄κΈ° λλ¬Έμ μ€λ₯Έμͺ½μΌλ‘ μμ§μ΄κ³ μΉ΄μ΄νΈλ₯Ό μ¬λ €μ£Όλ©΄μ μ¬κ·λ₯Ό λ리λ νμμ΄λ€
κ·Έ λ€μ μ΅λ¨κ±°λ¦¬λ₯Ό ꡬν΄μΌ νκΈ° λλ¬Έμ μ°λ¦¬κ° μνλ μ§μ κΉμ§ μμ§μμλ int μ΅λκ°μ μ μΈνκ³ κ·Έκ±°λ³΄λ€ μμ κ²½μ° μ΅μκ°μ΄λΌκ³ νλ¨νκ³ κ³μ μ μ₯νλ€ κ·Έλ¬λ©΄ λͺ¨λ μ¬κ·κ° λλ¬μλ μ΅μκ±°λ¦¬κ° λμ¬κ²μ΄λΌ μκ°μ νμλ€
κ·Όλ° λ무 μ΄λ ΅λ€.....
μμ΄κ³
νλ² κ΅¬νν΄λ³΄λ € νλ€κ° μ΄λ°μμ λλ €μΉμ°κ³ μ μμ μ½λλ₯Ό 리뷰ν΄λ³΄μλ€
μ’λ 곡λΆλ₯Όνκ³ λ΄κ° μκ°νλ λ°©μμΌλ‘ λ€μνλ² κ΅¬νν΄λ΄μΌκ² λ€
#include <iostream>
#include <queue>
using namespace std;
int n, m;
int graph[201][201];
// μ΄λν λ€ κ°μ§ λ°©ν₯ μ μ (μ, ν, μ’, μ°)
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
int bfs(int x, int y) {
// ν(Queue) ꡬνμ μν΄ queue λΌμ΄λΈλ¬λ¦¬ μ¬μ©
queue<pair<int, int> > q;
q.push({x, y});
// νκ° λΉ λκΉμ§ λ°λ³΅νκΈ°
while(!q.empty()) {
int x = q.front().first;
int y = q.front().second;
q.pop();
// νμ¬ μμΉμμ 4κ°μ§ λ°©ν₯μΌλ‘μ μμΉ νμΈ
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
// λ―Έλ‘ μ°ΎκΈ° 곡κ°μ λ²μ΄λ κ²½μ° λ¬΄μ
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
// λ²½μΈ κ²½μ° λ¬΄μ
if (graph[nx][ny] == 0) continue;
// ν΄λΉ λ
Έλλ₯Ό μ²μ λ°©λ¬Ένλ κ²½μ°μλ§ μ΅λ¨ 거리 κΈ°λ‘
if (graph[nx][ny] == 1) {
graph[nx][ny] = graph[x][y] + 1;
q.push({nx, ny});
}
}
}
// κ°μ₯ μ€λ₯Έμͺ½ μλκΉμ§μ μ΅λ¨ 거리 λ°ν
return graph[n - 1][m - 1];
}
int main(void) {
// N, Mμ 곡백μ κΈ°μ€μΌλ‘ ꡬλΆνμ¬ μ
λ ₯ λ°κΈ°
cin >> n >> m;
// 2μ°¨μ 리μ€νΈμ λ§΅ μ 보 μ
λ ₯ λ°κΈ°
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%1d", &graph[i][j]);
}
}
// BFSλ₯Ό μνν κ²°κ³Ό μΆλ ₯
cout << bfs(0, 0) << '\n';
return 0;
}
μ μ’ λ°μ΄λ¬μ€μΈ μ λ°μ΄λ¬μ€λ λ€νΈμν¬λ₯Ό ν΅ν΄ μ νλλ€. ν μ»΄ν¨ν°κ° μ λ°μ΄λ¬μ€μ 걸리면 κ·Έ μ»΄ν¨ν°μ λ€νΈμν¬ μμμ μ°κ²°λμ΄ μλ λͺ¨λ μ»΄ν¨ν°λ μ λ°μ΄λ¬μ€μ κ±Έλ¦¬κ² λλ€.
μλ₯Ό λ€μ΄ 7λμ μ»΄ν¨ν°κ° <κ·Έλ¦Ό 1>κ³Ό κ°μ΄ λ€νΈμν¬ μμμ μ°κ²°λμ΄ μλ€κ³ νμ. 1λ² μ»΄ν¨ν°κ° μ λ°μ΄λ¬μ€μ 걸리면 μ λ°μ΄λ¬μ€λ 2λ²κ³Ό 5λ² μ»΄ν¨ν°λ₯Ό κ±°μ³ 3λ²κ³Ό 6λ² μ»΄ν¨ν°κΉμ§ μ νλμ΄ 2, 3, 5, 6 λ€ λμ μ»΄ν¨ν°λ μ λ°μ΄λ¬μ€μ κ±Έλ¦¬κ² λλ€. νμ§λ§ 4λ²κ³Ό 7λ² μ»΄ν¨ν°λ 1λ² μ»΄ν¨ν°μ λ€νΈμν¬μμμ μ°κ²°λμ΄ μμ§ μκΈ° λλ¬Έμ μν₯μ λ°μ§ μλλ€.
μ΄λ λ 1λ² μ»΄ν¨ν°κ° μ λ°μ΄λ¬μ€μ κ±Έλ Έλ€. μ»΄ν¨ν°μ μμ λ€νΈμν¬ μμμ μλ‘ μ°κ²°λμ΄ μλ μ λ³΄κ° μ£Όμ΄μ§ λ, 1λ² μ»΄ν¨ν°λ₯Ό ν΅ν΄ μ λ°μ΄λ¬μ€μ κ±Έλ¦¬κ² λλ μ»΄ν¨ν°μ μλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
DFSλ₯Ό νμ©νλ λ¬Έμ μ΄λ€ dfsμ λν λ΄μ©μ μ¬λ¬λ² μ½μ΄λ μμ§ νμ©ν μ λκΉμ§ μ€λ ₯μ΄ μ€λ₯Έκ±° κ°μ§κ° μλ€ λͺκ°μ λ¬Έμ λ₯Ό λ νμ΄λ΄μΌν κ±° κ°λ€
dfsλ₯Ό μ¬μ©ν λλ μ΄λ―Έ λ°©λ¬Έν λ Έλλ₯Ό 체ν¬νλ λ°°μ΄κ³Ό μ λ ₯λ°μ λ°°μ΄ λκ°μ§λ₯Ό μ μλ³μλ‘ μ μΈν΄μ£Όμλ€
νΌμμκ°ν λλ λκ°λ₯Ό μ΄λ€μμΌλ‘ μ°κ²°ν΄μΌν μ§ μμ΄λμ΄κ° λ μ€λ₯΄μ§ μμλλ° λ€λ₯Έ λΈλ‘κ·Έλ₯Ό μ°Έκ³ ν΄λ³΄λ μλ°©ν₯ κ·Έλνλ‘ μ΄μ΄μ£Όλ©΄ νμμλ€
#include <iostream>
using namespace std;
int com[101][101];
int check[101];
int res = 0;
int n, m;
void dfs(int k)
{
check[k] = 1;
res++;
for (int i = 1; i <= n; i++)
{
if (com[k][i] && !check[i])
dfs(i);
}
}
int main()
{
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int x, y;
cin >> x >> y;
com[x][y] = 1;
com[y][x] = 1;
}
dfs(1);
cout << res - 1 << endl;
return 0;
}