2016/09/09 2

acmicpc.net 1238(다익스트라), 4485(다익스트라), 1504(다익스트라)

파이썬으로짜면 시간초과가 나는걸 알기에 c++로 짰다. 파이썬 카테고리인데.... https://www.acmicpc.net/problem/1238 다익스트라 문제. 숫자가 적어서 (가는거 + 오는거) 계산하면 된다. #include #include #include using namespace std; const long long INF = 999999999; int n,m,x,u,v,w; vector adj[1001]; long long dist[1001]; void dijkstra(int src) { for(int i=0;i>n>>m>>x; for(int i=0;i>u>>v>>w; adj[u].push_back(make_pair(v,w)); } int max = -1; for(int i=1;i

다익스트라 알고리즘.

설명 잘 된 블로그 : http://kks227.blog.me/220796029558 블로그에 나온 것처럼 그래프에서 어떤 정점에서 다른 정점으로 갈 경우 최소값을 구하는 알고리즘이다. 다익스트라 알고리즘은 모든 비용이 음수가 아닐 경우에만 동작한다. 시간 복잡도 : O(|E|lg|V|) (정점 V, 간선 E) 그림은 위의 블로그에서 퍼왔다. 1. 정점 0이 시작점이고 여기서 출발하여 다익스트라로 각 점까지의 최솟값을 구한다고 하자. 각 점까지의 거리는 초기치를 무한대로 설정해놓는다. 2. 첫 정점에서 갈수 있는 점들을 큐에 저장해놓고 가장 비용이 적은 점부터 방문한다. 방문후 비용을 초기화해준다. 3. 다음 시작점중 비용이 가장 적은 1부터 방문한다. 왜 비용이 적은것부터 방문하냐면, 아래 그림의 3이..

algorithm/theory 2016.09.09