# include<iostream>
using namespace std;
#define inf 10000
int a[5][5]={0,10,inf,30,100,
inf,0,50,inf,inf,
inf,inf,0,inf,10,
inf,inf,20,0,60,
inf,inf,inf,inf,0};
void dijkstra(int a[5][5],int n,int dis[],int pre[])
{
int flag[n];
flag[0]=1;
for(int i=1;i<n;i++)
{
dis[i]=a[0][i];
flag[i]=0;
pre[i]=0;
}
for(int i=0;i<n;i++)
{
int min=inf;
int u;
for(int j=0;j<n;j++)
if(dis[j]<min && !flag[j])
{min=dis[j];u=j;}
flag[u]=1;
for(int j=0;j<n;j++)
{
if(!flag[j] && a[u][j]<inf)
{
if(a[u][j]+dis[u]<dis[j])
{
dis[j]=a[u][j]+dis[u];
pre[j]=u;
}
}
}
}
}
int main()
{
int dis[5],pre[5],way[5];
dijkstra(a,5,dis,pre);
findway(4,5,way,pre);
cout<<"distance:"<<endl;
for(int i=1;i<5;i++)
cout<<dis[i]<<" ";
cout<<endl;
}