Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 5639
- 오손데이터읽기
- 언리얼 커스텀 플러그인
- UActor
- 2단계로킹
- 1759번
- 비재귀셰그먼트
- 민겸수
- 데이터베이스 배움터
- oracle
- Security
- command not found
- 1253번
- 트랜잭션 관리
- OS
- 1967번
- 백준 1253번
- 의미와 무의미의 경계에서
- UnrealMP
- SQL
- 실습
- hackerank
- Unreal
- Linux
- FBX
- 셰그먼트트리
- 백준
- objtofbx
- C++
- 언리얼 플러그인
Archives
- Today
- Total
fatalite
녹색 옷 입은 애가 젤다지? - 4485번 백준 본문
문제
문제 난이도 : 골드 4
문제 분류 : 다익스트라
문제 리뷰
딱히.. 없지만.. memset 이거 왜 작동 잘 안하는지 모르겠다.
제대로 다시 알아보자,,
문제 소스 코드
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <queue>
#include <unordered_set>
#include <memory.h>
using namespace std;
vector<pair<int, int>> Edges[16000];
int Distance[16000];
void Init()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
std::cout.tie(NULL);
}
void Dijkstra(int start)
{
for (int i = 0; i < 16000; i++)
{
Distance[i] = 2100000000;
}
Distance[start] = 0;
priority_queue<pair<int, int>> pq;
pq.push({ 0,0 });
while (!pq.empty())
{
pair<int, int> p = pq.top();
pq.pop();
int CurDist = - p.first;
int MidDest = p.second;
for (int i = 0; i < Edges[MidDest].size(); i++)
{
pair<int, int> np = Edges[MidDest][i];
int NextDist = np.first;
int FinalDest = np.second;
if (Distance[FinalDest] > NextDist + CurDist)
{
Distance[FinalDest] = NextDist + CurDist;
pq.push({ - Distance[FinalDest], FinalDest });
}
}
}
for (int i = 0; i < 16000; i++) {
Edges[i].clear();
}
}
int main()
{
//Initialize
Init();
int n;
int Count = 1;
while (cin >> n)
{
if (n == 0) break;
int Map[200][200];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int tmp;
cin >> tmp;
Map[i][j] = tmp;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i > 0) {
Edges[i * n + j].push_back({ Map[i-1][j], (i - 1) * n + j });
}
if (i < n - 1) {
Edges[i * n + j].push_back({ Map[i + 1][j], (i + 1) * n + j });
}
if (j > 0) {
Edges[i * n + j].push_back({ Map[i][j-1], i * n + j - 1 });
}
if (j < n - 1) {
Edges[i * n + j].push_back({ Map[i][j+1], i * n + j + 1 });
}
}
}
Dijkstra(0);
std::cout << "Problem " << Count++ << ": " << Map[0][0] + Distance[n * n - 1] << "\n";
}
}
'코딩 인터뷰 > Graph Basic' 카테고리의 다른 글
네트워크 연결 - 1922번 백준 (0) | 2023.09.26 |
---|---|
별자리 만들기 - 4386번 백준 (0) | 2023.09.26 |
알고스팟 - 1261번 백준 (0) | 2023.09.25 |
미로 찾기 - 2178번 백준 (0) | 2023.09.16 |
트리의 부모 찾기 - 백준 11725 (0) | 2023.04.06 |