http://blog.csdn.net/u011742541/article/details/12917981
int maps[maxn][maxn],dis[maxn];
bool vis[maxn];
typedef pair<int,int>pii;
void Dijstra( int x )
{
priority_queue<pii,vector<pii>,greater<pii> >que;
memset( vis,0,sizeof(vis) );
for( int i = 1; i <= n; i ++ )
dis[i] = inf;
dis[x] = 0;
que.push( make_pair(dis[x],x) );
while( !que.empty() )
{
pii u = que.top(); que.pop();
int v = u.second;
if( vis[v] )
continue;
vis[v] = true;
for( int i = 1; i <= n; i ++ )
{
if( maps[v][i] != inf && dis[i] > dis[v] + maps[v][i] )
{
dis[i] = dis[v] + maps[v][i];
que.push( make_pair( dis[i],i ) );
}
}
}
}