void dijk(int v)
{
memset(vis,0,sizeof(vis));
for(int i=1;i<=len;i++)
dist[i]=map[v][i];
dist[v]=0;
vis[v]=1;
for(int i=1;i<=len;i++)
{
int m=maxn,f=0;
for(int j=1;j<=len;j++)
if(!vis[j]&&m>dist[j])
{
m=dist[j];
f=j;
}
if(f==0)
break;
vis[f]=1;
for(int j=1;j<=len;j++)
if(!vis[j] && dist[j]>dist[f]+map[f][j])
dist[j]=dist[f]+map[f][j];
}
}
}
/*最小生成树是更新出t-1条边,每次选出当前符合条件最短的,并进行标记。*/
void prim()
{
for(i=0;i<t-1;i++)
{
min = inf;
for(j=0;j<t;j++)
if(vis[j])
for(k=0;k<t;k++)
if(!vis[k]&&w[j][k]<min)
{
min=w[j][k];
f=k;
}
vis[f]=true;
s+=min;
}
}
/*
最短路是从起点开始搜寻,
不断更新d[i].
*/
void dijkstra(int start)
{
int i,x,y,m;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
d[i]=(i==start?0:maxn);
for(i=0;i<n;i++)
{
m=maxn;
for(y=0;y<n;y++)
if(!vis[y]&&d[y]<=m)
{
m=d[y];
x=y;
}
vis[x]=1;
for(y=0;y<n;y++)
d[y]=min(d[y],d[x]+map[x][y]);
}
}
/