https://www.acmicpc.net/problem/1753
๋ฌธ์
๋ฐฉํฅ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฃผ์ด์ง ์์์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 10 ์ดํ์ ์์ฐ์์ด๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์ V์ ๊ฐ์ ์ ๊ฐ์ E๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) ๋ชจ๋ ์ ์ ์๋ 1๋ถํฐ V๊น์ง ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ค๊ณ ๊ฐ์ ํ๋ค. ๋์งธ ์ค์๋ ์์ ์ ์ ์ ๋ฒํธ K(1 ≤ K ≤ V)๊ฐ ์ฃผ์ด์ง๋ค. ์ ์งธ ์ค๋ถํฐ E๊ฐ์ ์ค์ ๊ฑธ์ณ ๊ฐ ๊ฐ์ ์ ๋ํ๋ด๋ ์ธ ๊ฐ์ ์ ์ (u, v, w)๊ฐ ์์๋๋ก ์ฃผ์ด์ง๋ค. ์ด๋ u์์ v๋ก ๊ฐ๋ ๊ฐ์ค์น w์ธ ๊ฐ์ ์ด ์กด์ฌํ๋ค๋ ๋ป์ด๋ค. u์ v๋ ์๋ก ๋ค๋ฅด๋ฉฐ w๋ 10 ์ดํ์ ์์ฐ์์ด๋ค. ์๋ก ๋ค๋ฅธ ๋ ์ ์ ์ฌ์ด์ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ์ด ์กด์ฌํ ์๋ ์์์ ์ ์ํ๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค๋ถํฐ V๊ฐ์ ์ค์ ๊ฑธ์ณ, i๋ฒ์งธ ์ค์ i๋ฒ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก์ ๊ฒฝ๋ก๊ฐ์ ์ถ๋ ฅํ๋ค. ์์์ ์์ ์ 0์ผ๋ก ์ถ๋ ฅํ๊ณ , ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ์๋ INF๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
ํ์ด 1 : ๋ฐํ์์๋ฌ (Segmentation Fault)
๋ฐ๋ก ์๋ฃ๊ตฌ์กฐ ์์ ๋ น๊ฐ์ ๋ค์ต์คํธ๋ผ ๋จ์์ ์ฐพ์ ๋ฃ๊ณ ์ด์ฌํ ๋จธ๋ฆฌ์ง๋ด์ ๊ตฌํํ๋ค
๋น์ฐํ๊ฒ ์ธ์ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค
#include <iostream>
using namespace std;
int main() {
//์
๋ ฅ
int v,e,k;
cin >> v >> e >> k;
int g[v+1][v+1]; //๊ฐ ๋
ธ๋์ ๊ฐ์ ๊ฐ์ค์น๋ฅผ ๊ธฐ๋กํ ๊ทธ๋ํ
for(int i=0; i<v+1; i++){
for(int j=0; j<v+1; j++){
g[i][j] = 200000;
}
}
int d[v+1]; //k์์ i๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ
bool visited[v+1]; //๋ฐฉ๋ฌธ์ฌ๋ถ
for(int i=0; i<e; i++){
int depart, arrive, weight;
cin >> depart >> arrive >> weight;
if(g[depart][arrive] > weight){
g[depart][arrive] = weight;
}
}
//์ด๊ธฐํ
for(int i=1; i<=v; i++){
d[i] = g[k][i];
visited[i] = false;
}
d[k] = 0;
visited[k] = true;
//๊ณ์ฐ
for(int i=0; i<v; i++){
//d์์ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ์ง๋ ์ธ๋ฑ์ค x ์ฐพ์๋ด๊ธฐ
int tmp = 200001; //๊ฐ๋ฅํ ์ต๋์ ๊ธธ์ด
int x;
for(int i=1; i<=v; i++){
if(!visited[i] && tmp > d[i]){
tmp = d[i];
x = i;
}
}
visited[x] = true;
//๋ฐฉ๋ฌธ๋์ง ์์ ๋
ธ๋๋ค์ ํํด ๋ ์งง์๊ฑฐ๋ฆฌ๋ฅผ d์ ๋ฃ๋๋ค
for(int j=1; j<=v; j++){
if(!visited[j]){
if(d[j] > d[x] + g[x][j]){
d[j] = d[x] + g[x][j];
}
}
}
}
//์ถ๋ ฅ
for(int i=1; i<=v; i++){
if(d[i] == 200001)
cout << "INF";
else
cout << d[i] << "\n";
}
return 0;
}
ใ Segmentation ์ค๋ฅ๊ฐ ๋ฌ๋ค.. ํ๋ฌดํ๋ค ์ง์ง
๊ฒ์ํ์ ๋ค์ ธ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ํ์ด 256MB ์ธ๋ฐ
๋ด ์ฝ๋์์๋ ๋ง์ฝ ๋ ธ๋๊ฐ 20000๊ฐ์ธ ๊ฒฝ์ฐ
์ธ์ ๋ฐฐ์ด g ๊ฐ 20000 * 20000 * 4byte(์ ์ํ์๋ฃ) = 1600MB ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๊ฒ ๋๊ธฐ ๋๋ฌธ.....
์ด์ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํด์ผ ํ๋๋ฐ...
ํ์ด2
๋ ์ด๋ฏธ ์ง์ณค๋ค
๋ค์์ ๋ ์ค๊ฒ ๋ค
'๐ฆ Chango > ๐ฃ EDOC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ][C++] ๋ฐฑ์ค 1717๋ฒ : ์งํฉ์ ํํ (0) | 2021.11.24 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 9237๋ฒ : ์ด์ฅ๋ ์ด๋ (0) | 2021.11.17 |
[BOJ][C++] ๋ฐฑ์ค 11256๋ฒ: ์ฌํ (0) | 2021.11.16 |
[BOJ][C++] ๋ฐฑ์ค 1058๋ฒ : ์น๊ตฌ (0) | 2021.11.10 |
[BOJ][C++] 16395๋ฒ: ํ์คํฌ์ ์ผ๊ฐํ (0) | 2021.11.03 |