#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int INT_MAX = 10000;
const int n = 10;
int graph[n+1][n+1] = {0};
int dist[n+1] = {0};
int pre[n+1] = {0};
typedef struct Node {
int vertex;
int length;
}Node;
void initParament()
{
}
bool compare(Node first, Node second)
{
return first.length < second.length;
}
void shortestPath()
{
vector<Node> heap;
Node current;
current.vertex = 1;
current.length = 0;
while(true){
for(int i=1; i<=n; i++){
if(graph[i][current.vertex]<INT_MAX && graph[i][current.vertex]+current.length<dist[i]){
Node new_node;
new_node.vertex = i;
new_node.length = graph[i][current.vertex]+current.length;
heap.push_back(new_node);
push_heap(heap.begin(), heap.end(), compare);
dist[i] = graph[i][current.vertex]+current.length;
pre[i] = current.vertex;
}
}
if( heap.empty() ){
break;
}
pop_heap(heap.begin(), heap.end(), compare);
current = *heap.rbegin();
heap.erase(heap.end()-1);
}
}
int main()
{
initParament();
shortestPath();
for(int i=1; i<=n; i++){
cout << dist[i] << “/t”;
}
cout << endl;
return 0;
}