标签:ext ++i sub jks amp track ted main his
5 1 0 1 1 2 0 2 3 3 1 1 1 4 100 0 1 0 1
2
//Dijkstra
#include <stdio.h>
#include <string.h>
#define INF 0x3f3f3f3f
int N;
int n;
int low[20];
bool vis[20];
int map[20][20];
void Dijkstra()
{
int pos=0;
int i,j;
memset(vis,0,sizeof(vis));
memset(low,INF,sizeof(low));
for(i=0;i<n;++i)
{
low[i]=map[0][i];
}
vis[0]=1;
low[0]=0;
for(i=0;i<n-1;++i)
{
int min=INF;
for(j=0;j<n;++j)
{
if(!vis[j]&&min>low[j])
{
min=low[j];
pos=j;
}
}
vis[pos]=1;
for(j=0;j<n;++j)
{
if(!vis[j]&&low[j]>map[pos][j]+low[pos])
low[j]=map[pos][j]+low[pos];
}
}
printf("%d\n",low[n-1]);
}
int main()
{
int i, j;
int M, flag;
int u,v,w;
while(~scanf("%d", &N))
{
n=N+1;
for(i=0;i<=N;++i)
for(j=0;j<=i;++j)
map[i][j]=map[j][i]=INF;
//memset(map,INF,sizeof(map));
for(int i = 0; i < N; ++i)
{
scanf("%d%d", &M, &flag);
if(flag) map[i][n-1]=map[n-1][i]=0;
while(M--)
{
scanf("%d%d",&v,&w);
if(map[i][v]>w)
map[i][v]=map[v][i]=w;
}
}
Dijkstra();
}
}标签:ext ++i sub jks amp track ted main his
原文地址:http://www.cnblogs.com/cynchanpin/p/7107160.html