#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]);    
                }
            }
        }
    }    
}

 

posted on 2016-05-12 14:07  cleverbiger  阅读(250)  评论(0)    收藏  举报