您的位置:首页 > 其它

最短路

2016-07-25 13:10 176 查看
//dijkstra
#include<queue>
#include<cstring>

using namespace std;

const int MAXN = 100;
const int MAXM = 10000;
////////////////////////////////////////////////
struct dij_edge{
int from, to, next, val;
}dij_e[MAXM];

struct Node{
int x, d;
Node(){}
Node( int a, int b ): x( a ), d( b ){}
bool operator < ( Node a ) const{
return d > a.d;
}
};

int dij_h[MAXN], dij_dis[MAXN], dij_cnt;

void dij_init(){
dij_cnt = 0;
memset( dij_h, -1, sizeof( dij_h ) );
}

void dij_add( int from, int to, int val ){
dij_e[dij_cnt].from = from;
dij_e[dij_cnt].to = to;
dij_e[dij_cnt].val = val;
dij_e[dij_cnt].next = dij_h[from];
dij_h[from] = dij_cnt++;
}

void dij( dij_edge *edge, int *dis, int *h, int s ){
dis[s] = 0;

priority_queue<Node> Q;
Q.push( Node( s, dis[s] ) );

while( !Q.empty() ){
Node temp = Q.top(); Q.pop();
int x = temp.x;
if( temp.d > dis[x] ) continue;
for( int k = h[x]; k != -1; k = edge[k].next ){
int y = edge[k].to;
if( dis[y] > dis[x] + edge[k].val ){
dis[y] = dis[x] + edge[k].val;
Q.push( Node( y, dis[y] ) );
}
}
}
}

//dij( dij_e, dij_dis, dij_h, source );
int main(){
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: