dijkstra:
void dijkstra(int s)
{
int i,j,mark;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
dis[i]=(i==s?0:map[s][i]);
vis[s]=1;
for(i=1;i<n;i++)
{
int temp=INF;
for(j=1;j<=n;j++)
if(!vis[j]&&dis[j]<temp)
temp=dis[mark=j];
vis[mark]=1;
for(j=1;j<=n;j++)
if(!vis[j]&&dis[j]>dis[mark]+map[mark][j])
dis[j]=dis[mark]+map[mark][j];
}
}