๊ทธ๋ํ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํ ๋๋, ๋ฌธ์ ์ํฉ์ ๊ทธ๋ํ๋ก ๋ชจ๋ธ๋งํ ํ ํธ๋ ๊ฒ์ด ๋ณดํธ์ ์ด๋ค.
์ด ๋, ๋ชจ๋ธ๋งํ ๊ทธ๋ํ์ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๋ ๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
๐ 1. ์ธ์ ํ๋ ฌ 2. ์ธ์ ๋ฆฌ์คํธ
๐ฉ ์ธ์ ํ๋ ฌ
๊ทธ๋ํ์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ด์ฐจ์ ๋ฐฐ์ด๋ก ๋ํ๋ด๋ ๋ฐฉ์
์ธ์ ํ๋ ฌ์ adj[][]๋ผ๊ณ ํ๋ค๋ฉด, adj[i][j]์ ๋ํด์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ ๊ฐ๋ฅ
adj[i][j] : ๋ ธ๋ i์์ ๋ ธ๋ j๋ก ๊ฐ๋ ๊ฐ์ ์ด ์๋ค๋ฉด 1, ์๋๋ฉด 0
cf. ๋ง์ฝ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ๋ผ๋ฉด 1 ๋์ ์ ๊ฐ์ค์น์ ๊ฐ์ ์ง์ ๋ฃ์ด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํ ๊ฐ๋ฅํ๋ค.
๐ ์์
์ ํฅ ๊ทธ๋ํ๊ฐ ์๋ ๋ฌดํฅ ๊ทธ๋ํ์์๋, ๋ ธ๋ i ๐ ๋ ธ๋ j ๋ผ๋ ๋ง์, ๋ ธ๋ j ๐ ๋ ธ๋ i๋ผ๋ ์๋ฏธ์ด๋ค.
๋ฐ๋ผ์, ์ธ์ ํ๋ ฌ์ด ๋๊ฐ์ฑ๋ถ(i=j์ธ ์์๋ค)์ ๊ธฐ์ค์ผ๋ก ๋์นญ์ธ ์ฑ์ง์ ๊ฐ๊ฒ ๋๋ค.
๐ฉ ์ฅ์
๊ตฌํ์ด ์ฝ๋ค.
์ฐ๊ฒฐ๋์ด ์๋์ง ํ์ธํ๊ณ ์ถ์ ๋, 1/0 ํ์ธ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ O(1) ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
๐ฉ ๋จ์
์ ์ฒด ๋ ธ๋์ ๊ฐ์๋ฅผ V, ๊ฐ์ ์ ๊ฐ์๋ฅผ E๋ผ๊ณ ํ๋ฉด, ๋ ธ๋ i์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํด๋ณด๊ณ ์ถ์ ๊ฒฝ์ฐ, adj[i][1] ~ adj[i][V]๋ฅผ ๋ชจ๋ ํ์ธํด๋ณด์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด O(V)์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์ด๋ ๋ ธ๋์ ๊ฐ์์ ๋นํด ๊ฐ์ ์ ๊ฐ์๊ฐ ํจ์ฌ ์ ์ ๊ทธ๋ํ๋ผ๋ฉด ์น๋ช ์ ์ด๋ค. ๋ง์ฝ, ๋ ธ๋์ ๊ฐ์๊ฐ ์ด 1์ต๊ฐ์ธ๋ฐ, ๊ฐ ๋ ธ๋๋ง๋ค ์ฐ๊ฒฐ๋ ๊ฐ์ ์ด ๋ง์๋ดค์ 2๊ฐ์ธ ๊ทธ๋ํ๊ฐ ์๋ค๋ฉด, ํน์ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ด ๋ช ๋ฒ ๋ ธ๋์ธ์ง ํ์ธํ๊ธฐ ์ํด ์ด 1์ต ๊ฐ์ ๋ ธ๋๋ค์ ๋ชจ๋ ํ์ธํด์ผ ํ๋ค.
๐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ๋จ์ ๋ณด์ ๊ฐ๋ฅ
๐ฉ ๊ตฌํ
๋ ธ๋์ ๊ฐ์, ๊ฐ์ ์ ๊ฐ์, ๊ฐ ๊ฐ์ ์ ์๋ ๋ ธ๋๊ฐ ์ฃผ์ด์ง๋ค.
#include <iostream>
using namespace std;
int node, edge;
int adj[100][100];
int main(){
cin >> node >> edge;
for(int i = 0; i < edge; ++i) {
int a, b;
cin >> a >> b;
adj[a][b] = 1;
// ๋ฌดํฅ ๊ทธ๋ํ๋ผ๋ฉด
adj[b][a] = 1;
}
}
๐ฉ ์ธ์ ๋ฆฌ์คํธ
STL์ vector๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํธํ๋ค. vector์ ๋ฐฐ์ด vector<int> ad[]๋ก ๋ํ๋ด๋ ๋ฐฉ์. ์ฌ๊ธฐ์๋ ๋ ธ๋์ ๋ฒํธ๊ฐ ์ง์ ์ ์ฅ๋๋ค.
adj[i] : ๋ ธ๋ i์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ์์๋ก ๊ฐ๋ vector
cf. ๋ง์ฝ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ค๋ฉด pair<int, int> adj[]๋ฅผ ํตํด ๊ตฌํ ๊ฐ๋ฅํ๋ค.
pair<int, int>์ first์๋ ๋ ธ๋์ ๋ฒํธ, second์๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ์ ์ฅํ๋ค.
๐ ์์
adj[1][0] = 2, adj[1][1] = 3, adj[1][2] = 4, adj[2][0] = 3
์ค๋ฅธ์ชฝ ์ธ์ ๋ฆฌ์คํธ์์ adj[1]์ ์๋ ์ธ ๋ ธ๋์ ์์๋ ์๋ฏธ๊ฐ ์๋ค. ๋ณด๊ธฐ ์ข๊ฒ ์ค๋ฆ์ฐจ์์ผ๋ก ํํํ ๊ฒ ๋ฟ์ด๋ค.
๋ฐ๋ผ์ adj[1]์ ๋ ธ๋2์ ๋ ธ๋3 ์ฌ์ด์ ํ์ดํ๊ฐ ์๋ ๊ฒ์ ๋ ธ๋2์ ๋ ธ๋3 ์ฌ์ด์ ๊ฐ์ ์ด ์๋ ๊ฒ์ด ์๋, vector์ ๋ ธ๋ 3์ด ๋ ธ๋ 2๋ณด๋ค ๋์ค์ push_back ๋์๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
๋ฌดํฅ๊ทธ๋ํ๋ ์๋์ ๊ฐ๋ค.
๐ฉ ์ฅ์
์ค์ ๋ก ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ๋ํ ์ ๋ณด๋ง ์ ์ฅํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ๋ฒกํฐ๋ค์ ์์์ ๊ฐ์์ ํฉ์ด ๊ฐ์ ์ ๊ฐ์์ ๊ฐ๋ค๋ ์
์ฆ, ๊ฐ์ ์ ๊ฐ์์ ๋น๋กํ๋ ๋ฉ๋ชจ๋ฆฌ๋ง ์ฐจ์งํ๋ค.
๋ง์ฝ, ๋ ธ๋2์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํ๊ณ ์ถ๋ค๋ฉด, ์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ adj[2][1], adj[2][2], adj[2][3], adj[2][4]์ ๊ฐ์ด ์ด 4๋ฒ์ ํ์ธํด ๋ณด์์ผ ํ์ง๋ง, ์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ์ค์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค๋ง ํ์ธํด๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ adj[2][0]~adj[2][adj[2].size()-1]๊น์ง ์ด 1๋ฒ๋ง ํ์ธํด๋ณด๋ฉด ๋๋ค.
์ ์ฒด ๋ ธ๋์ ๋ํ ํ์์ ์ํํ๋ ์ํฉ์ผ๋ก ํ์ฅํด์ ์๊ฐํด๋ณด์. ๋ ธ๋๊ฐ V๊ฐ, ๊ฐ์ ์ด E๊ฐ๋ผ๊ณ ํ๋ฉด, ์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ, ๊ฐ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด๋ณด๊ธฐ ์ํด ๋ชจ๋ ๋ ธ๋์ ๋ํด ํ์ธํด๋ณด์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด O(V*V)์ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ค. ํ์ง๋ง, ์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๊ฐ๋ ธ๋๋ง๋ค ์ฐ๊ฒฐ๋ ๋ ธ๋๋ง ํ์ธํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ์ ์ฒด ๊ฐ์ ์ ๊ฐ์๋งํผ๋ง ํ์ธํด๋ณผ ์ ์๋ค. ๋ฐ๋ผ์ O(E)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
์ด๋ ๊ฒ ๊ฐ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋ ธ๋๋ค์ ๋ฐฉ๋ฌธํด ๋ณด์์ผ ํ๋ ๊ฒฝ์ฐ, ์ธ์ ๋ฆฌ์คํธ๋ก ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ์ ์ฅํ๋ ๊ฒ์ด ์๊ฐ์ ํฐ ์ด์ ์ ๊ฐ์ง๋ค.
๐ฉ ๋จ์
๋ ธ๋i์ ๋ ธ๋j๊ฐ ์ฐ๊ฒฐ๋์ด ์๋์ง ์๊ณ ์ถ๋ค๋ฉด? adj[i]์ ๋ฒกํฐ ์ ์ฒด๋ฅผ ๋๋ฉฐ, j๋ฅผ ์ฑ๋ถ์ผ๋ก ๊ฐ๋์ง ํ์ธํด๋ณด์์ผ ํ๋ค. ๋ฐ๋ผ์, ์๊ฐ ๋ณต์ก๋๋ O(V)๊ฐ ๋ ๊ฒ์ด๋ค. ์ธ์ ํ๋ ฌ์ ๊ฒฝ์ฐ์๋ adj[i][j]๊ฐ 1์ธ์ง 0์ธ์ง๋ง ํ์ธํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค. ์ด๋ฌํ ๋จ์ ์ด ์๊ธฐ ๋๋ฌธ์, ๋ฌธ์ ์ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ ํํ ๋ฐฉ์์ ์ด์ฉํด์ ์ฐ๊ฒฐ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๐ฉ ๊ตฌํ
#include <iostream>
using namespace std;
int node, edge;
vector<int> adj[100];
int main() {
cin >> node >> edge;
for(int i = 0; i < edge; ++i) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a); // ๋ฌดํฅ๊ทธ๋ํ๋ผ๋ ์กฐ๊ฑด
}
// ๋
ธ๋ 1๊ณผ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๋
ธ๋๋ค์ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ
for(int i = 0; i < adj[1].size(); ++i) {
cout << adj[1][i] << '\n';
}
}
cf. ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ๋ํ๋ด๋ ๊ฒฝ์ฐ, vector<pair<int,int>>์ ๋ฐฐ์ด๋ก ๊ตฌํํ๊ฒ ๋๋ค.
adj[a][0].first = b, adj[a][0].second = c๋ผ๊ณ ํ๋ฉด
์์ ์ด ๋ ธ๋ a, ์ข ์ ์ด ๋ ธ๋ b, ๊ฐ์ค์น๊ฐ c์ธ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > โจ ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ (Set) (0) | 2024.04.16 |
---|---|
๋งต(Map) (0) | 2024.04.16 |
ํ์ด(Pair) (0) | 2024.04.15 |
๋ฒกํฐ(Vector) (0) | 2024.04.15 |
๋๋น ์ฐ์ ํ์(BFS) (0) | 2024.04.14 |