#define INF 32767
#define max 10
void dispath(int dist[max],int path[max],int s[max],int n,int v0)
{
int i,k;
for(i=0;i<n;i++)
{
if(s[i]==1)
{
k=i;
printf("%d reach %d the least distance is:",v0,i);
while(k!=v0)
{
printf("%d -",k);
k=path[k];
}
printf("%d ",k);
printf("%d",dist[i]);
}
else
printf("not exist luji");
}
}
void dijkstra(int cost[max][max],int n,int v0)
{
int i,j,u,kao;
int dist[max];
int s[max];
int path[max];
for(i=0;i<n;i++)
{
s[i]=0;
dist[i]=cost[v0][i];
if(cost[v0][i]<INF)
path[i]=v0;
else
path[i]=-1;
}
s[v0]=1;
path[v0]=v0;
for(i=1;i<=n;i++)
{
kao=INF;
u=0;
for(j=0;j<n;j++)
if((s[j]==0)&&(dist[j]<kao))
{
u=j;
kao=dist[j];
}
s[u]=1;
for(j=0;j<n;j++)
if((s[j]==0)&&(cost[u][j]<INF))
if((dist[u]+cost[u][j])<dist[j])
dist[j]=dist[u]+cost[u][j];
}
}
main()
{
int i,j,n,v0;
int cost[max][max];
printf("please input n:");
n=scanf("%d",&i);
printf("please input v0:");
v0=scanf("%d",&i);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&cost[i][j]);
dijkstra(cost,n,v0);
}