#include <cstdio>
#include <iostream>
using namespace std;
const int MAX=1000;
void dijkstra(const int g[][6],bool p[][6],bool *f,int *d,int m)
{
int i=0,j=0,min,v,k;
for(i=0;i< m ;i++)
{
d[i]=g[0][i];
#include <iostream>
using namespace std;
const int MAX=1000;
void dijkstra(const int g[][6],bool p[][6],bool *f,int *d,int m)
{
int i=0,j=0,min,v,k;
for(i=0;i< m ;i++)
{
d[i]=g[0][i];
f[i]=false;
for (j=0;j<m;j++)
p[i][j]=false;
if(d[i]<MAX)
{
p[i][i]=true;
p[i][0]=true;
}
}
for (j=0;j<m;j++)
p[i][j]=false;
if(d[i]<MAX)
{
p[i][i]=true;
p[i][0]=true;
}
}
f[0]=true;min = MAX;
for(j=1;j<m;j++)
{
min=MAX;
for(i=1;i< m ;i++)
{
if(!f[i]&&(min>d[i]))
{
v=i;
min = d[i];
}
for(j=1;j<m;j++)
{
min=MAX;
for(i=1;i< m ;i++)
{
if(!f[i]&&(min>d[i]))
{
v=i;
min = d[i];
}
}
f[v]=true;
for(i=1;i< m ;i++)
{
if(!f[i]&&(min+g[v][i]<d[i]))
{
for(k=0;k<m;k++)
p[i][k]=p[v][k];
p[i][i]=true;
d[i]=min+g[v][i];
}
}
}
}
int main()
{
int m=6,i,j,g[6][6],d[6];
bool p[6][6],f[6];
for(i=0;i<m;i++)
for(j=0;j<m;j++)
g[i][j]=MAX;
g[0][2]=10;
g[0][4]=30;
g[0][5]=100;
g[1][2]=5;
g[2][3]=50;
g[3][5]=10;
g[4][3]=20;
g[4][5]=60;
f[v]=true;
for(i=1;i< m ;i++)
{
if(!f[i]&&(min+g[v][i]<d[i]))
{
for(k=0;k<m;k++)
p[i][k]=p[v][k];
p[i][i]=true;
d[i]=min+g[v][i];
}
}
}
}
int main()
{
int m=6,i,j,g[6][6],d[6];
bool p[6][6],f[6];
for(i=0;i<m;i++)
for(j=0;j<m;j++)
g[i][j]=MAX;
g[0][2]=10;
g[0][4]=30;
g[0][5]=100;
g[1][2]=5;
g[2][3]=50;
g[3][5]=10;
g[4][3]=20;
g[4][5]=60;
dijkstra(g,p,f,d,m);
return 0;
}
}