#include <iostream> #define NODE const int N = 0x3f3f3f3f; int dis[N], vis[N], G[N][N], pre[N]; //pre[]记录前驱 ; int value[N], getvalue[N]; //经过每个结点获得的价值 ; void dijkatra(int src) { memset(vis, 0, sizeof(vis)); for(int i=0; i<n; i++){ dis[i]= INF;} dis[src]= 0; getvalue[src]= value[src]; for(int i=0; i< n; i++) { int temp, minn=INF; for(int j=0; j<n; j++){ if(!vis[j] && dis[j]< minn){ minn =dis[j]; temp= j; } } vis[temp]=1; if(minn= INF) return; for(int j=0; j<n; j++){ if(!vis[j]){ if(dis[j]> dis[temp]+ G[temp][j]){ dis[j]= dis[temp]+ G[temp][j]; pre[j]= temp; getvalue[j]= getvalue[temp]+ value[j]; } if(dis[j]== dis[temp]+ G[temp][j]) { getvalue[j]= max(getvalue[temp]+ value[j], getvalue[j]); } } } } }
浙公网安备 33010602011771号