[CS] AdjacentMatrix&AdjacentList

[CS] AdjacentMatrix&AdjacentList

Tags
Computer Science
๐Ÿ’ก
๊ทธ๋ž˜ํ”„ ์ž๋ฃŒ๊ตฌ์กฐ๋Š” STL์—์„œ ๋”ฐ๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์•„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ตฌํ˜„ ๋ฐฉ์‹์œผ๋กœ๋Š” ์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

์ธ์ ‘ ํ–‰๋ ฌ

์ผ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

์ฒซ ๋ฒˆ์งธ ํ–‰์ธ 1๋ฒˆ ๋…ธ๋“œ๋Š” 2๋ฒˆ, 3๋ฒˆ, 4๋ฒˆ ๋…ธ๋“œ๋กœ ์ด์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ํ–‰์ธ 2๋ฒˆ ๋…ธ๋“œ๋Š” 3๋ฒˆ ๋…ธ๋“œ๋งŒ ์ด์–ด์ง„๋‹ค.
https://sarah950716.tistory.com/12
์ฆ‰, ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด์–ด์ง€๋Š” ๊ฐ„์„  ์ด ์žˆ์„ ๋•Œ 1, ์—†์„๋•Œ 0์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. ์ด๋ฅผ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ํ‘œ์™€ ๊ฐ™๋‹ค.

๋ฌด๋ฐฉํ–ฅ(์–‘๋ฐฉํ–ฅ) ๊ทธ๋ž˜ํ”„

๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋Š” ์–‘๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ‘œํ˜„์€ ์ผ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„์™€ ๋น„์Šทํ•˜๋‹ค. 1๋ฒˆ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ 2, 3, 4๋ฒˆ ๋…ธ๋“œ๋ฅผ 1๋กœ ํ‘œํ˜„ํ•œ๋‹ค. 2๋ฒˆ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ 1, 3๋ฒˆ ๋…ธ๋“œ๋ฅผ 1๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
https://sarah950716.tistory.com/12
์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•œ ํ–‰๋ ฌ์€ ์˜ค๋ฅธ์ชฝ ํ‘œ์™€ ๊ฐ™๋‹ค. ํ–‰๋ ฌ์„ ๋ณด๋ฉด ๋Œ€๊ฐ์„ ์„ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์นญ์ด ๋จ์„ ์•Œ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ฌด๋ฐฉํ–ฅ(์–‘๋ฐฉํ–ฅ)๊ทธ๋ž˜ํ”„์—์„œ๋งŒ ๋‚˜ํƒ€๋‚˜๋Š” ํŠน์ง•์ด๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

์ผ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„

์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ๋น„์Šทํ•˜๋‹ค.
https://sarah950716.tistory.com/12
์—ฐ๊ฒฐ์ด ์—†์œผ๋ฉด ๊ณต๊ฐ„ ํ• ๋‹น์ด ์•„์˜ˆ ์•ˆ๋œ๋‹ค.
0 or 1 ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ ์ž์ฒด๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•œ ๋ฆฌ์ŠคํŠธ๋Š” ์˜ค๋ฅธ์ชฝ ํ‘œ์™€ ๊ฐ™๋‹ค.

๋ฌด๋ฐฉํ–ฅ(์–‘๋ฐฉํ–ฅ) ๊ทธ๋ž˜ํ”„

๋ฌด๋ฐฉํ–ฅ(์–‘๋ฐฉํ–ฅ)๋„ ์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ๋น„์Šทํ•˜๋‹ค. ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ๋“ค์ด ์ „๋ถ€ ํ• ๋‹น๋œ๋‹ค
https://sarah950716.tistory.com/12
์ด๋ ‡๊ฒŒ ํ‘œํ˜„ํ•œ ๋ฆฌ์ŠคํŠธ๋Š” ์˜ค๋ฅธ์ชฝ ํ‘œ์™€ ๊ฐ™๋‹ค. ์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ด๋ ‡๋‹ค ํ•  ํŠน์ง•์ด ๋ˆˆ์— ๋ณด์ด์ง„ ์•Š๋Š”๋‹ค.

์ธ์ ‘ ํ–‰๋ ฌ๊ณผ ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๋น„๊ต

์ธ์ ‘ ํ–‰๋ ฌ

์ธ์ ‘ ํ–‰๋ ฌ์€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ข‹์ง€ ์•Š๋‹ค. ๊ฐ„์„ ์˜ ์œ ๋ฌด๋ฅผ 0 or 1 ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Nยฒ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ญ์ƒ ํ• ๋‹น๋˜์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ํƒ์ƒ‰ ์†๋„๋Š” ๋น ๋ฅด๋‹ค. ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ํƒ์ƒ‰์— O(1)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์ด ์ƒ๋Œ€์ ์œผ๋กœ ์ข‹๋‹ค. ์—ฐ๊ฒฐ๋œ ๊ฐ„์„ ์ด ์—†๋‹ค๋ฉด ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ํ•˜์ง€๋งŒ, ํƒ์ƒ‰ ์†๋„๋Š” ๋А๋ฆฌ๋‹ค. ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•ด O(N)์˜ ํƒ์ƒ‰ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.
ใ…ค
์ธ์ ‘ ํ–‰๋ ฌ
์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ
๋‚˜์จ
์ข‹์Œ
ํƒ์ƒ‰ ์†๋„
๋น ๋ฆ„
๋А๋ฆผ
ํ‘œํ˜„ ๋ฐฉ์‹
๊ฐ„์„  ์œ ๋ฌด๋ฅผ 0 or 1 ๋กœ ํ‘œํ˜„
๊ฐ„์„ ์— ์—ฐ๊ฒฐ๋œ ๋…ธ๋“œ๋ฅผ ์ €์žฅ
๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋•Œ ๊ตฌํ˜„ ์กฐ๊ฑด์— ์•Œ๋งž๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•œ๋‹ค.
  • ๊ฐ„์„ ์ด ์ ๋‹ค๋ฉด ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.
  • ๊ฐ„์„ ์ด ๋งŽ๋‹ค๋ฉด ์ธ์ ‘ ํ–‰๋ ฌ์ด ํƒ์ƒ‰ ์†๋„ ๋ฉด์—์„œ ์œ ๋ฆฌํ•˜๋‹ค.

๊ตฌํ˜„

์ธ์ ‘ ํ–‰๋ ฌ

class Graph { private: vector<vector<int>> adj; int vNum; public: Graph(int vertex) { vNum = vertex; adj.resize(vNum, vector<int>(vNum, 0)); } void addEdge(int i, int j) { if (i >= 0 && i < vNum && j >= 0 && j < vNum) { adj[i][j] = 1; //adj[j][i] = 1; // ์–‘๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ } } void removeEdge(int i, int j) { if (i >= 0 && i < vNum && j >= 0 && j < vNum) { adj[i][j] = 0; //adj[j][i] = 0; // ์–‘๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ } } };

์ธ์ ‘ ๋ฆฌ์ŠคํŠธ

class Graph { private: vector<list<int>> adj; int vNum; public: Graph(int vertex) { vNum = vertex; adj.resize(vertex); } void addEdge(int src, int dest) { if (src >= 0 && src < vNum && dest >= 0 && dest < vNum) { adj[src].push_back(dest); //adj[dest].push_back(src); // ์–‘๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ } } void removeEdge(int src, int dest) { if (src >= 0 && src < vNum && dest >= 0 && dest < vNum) { adj[src].remove(dest); //adj[dest].remove(src); // ์–‘๋ฐฉํ–ฅ์ธ ๊ฒฝ์šฐ } } };
์—„๋ฐ€ํžˆ ๋”ฐ์ง€๋ฉด list๋กœ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๋งž์ง€๋งŒ, ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ• ๋•Œ๋Š” std::vector๋กœ ๊ตฌํ˜„ํ•ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค๊ณ  ํ•œ๋‹ค.
ํ•ด์„œ ํ–‰์€ vector๋กœ, ์—ด์€ list๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค.
ย