void DshortedPath(const int v)
{
int u, k;
int max = 10000;
Edge *p;
int n = graphsize;
int* path = new int[graphsize];
int* dist = new int[graphsize];
int* s = new int[n];
for (int i = 0;i < n;i++)
{
path[i] = -1;
dist[i] = max;
s[i] = 0;
}
dist[v] = 0;
s[v] = 1;
p = Head[v].adjacent;
u = v;
for (int j = 0;j < n;j++)
{
while (p != NULL)
{
k = p->VerAdj;
if (s[k] != 1 && dist[u] + p->cost < dist[k])
{
dist[k] = dist[u] + p->cost;
path[k] = u;
}
p = p->link;
}
int ldist = max;
for (i = 0;i < n;i++)
{
if (dist[i] > 0 && dist[i] < ldist&&s[i] == 0)
{
ldist = dist[i];
u = i;
}
}
s[u] = 1;
p = Head[u].adjacent;
}
for (i = 0;i < n;i++)
cout << path[i] << " ";
for (i = 0;i < n;i++)
cout << dist[i] << " ";
delete[]path;
delete[]dist;
}