其实也是求最小生成树的算法。。。
const int N=110;
const int INF=0x3f3f3f3f;
int visit[NUM];
int dist[NUM];
int map[NUM][NUM];
int ans=0;
Dijkstra()
{
visit[0]=1;
dist[0]=0;
for(int i=0;i<NUM;i++)
{
int tmp=INF;
int tmp_int;
for(int i=0;i<NUM;i++)
{
if(!visit[i]&&tmp>dist[i])
{
tmp_int=i;
tmp=dist[i];
}
}
if(tmp==INF)
break;
visit[tmp_int]=1;
ans+=dist[tmp_int];
for(i=0;i<NUM;i++)
{
if(!visit[i]&&dist[i]>dist[tmp_int]+map[tmp_int][i])
dist[i]=dist[tmp_int]+map[tmp_int][i];
}
}
return ans;
}