青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

misschuer

常用鏈接

統計

積分與排名

百事通

最新評論

A*算法求第k短路

參考了http://blog.myspace.cn/e/404763245.htm
  1 /*
  2 **下面給出自己寫的鄰接表形式采用SPFA計算啟發函數的效率表示一般的K短路代碼
  3 **表示可以當成模板,這個不是最好的代碼, 不過一般情況下都可以的吧,現在去嘗試下用A*做迷宮問題.據說效率不是一般的高
  4 **/
  5 #include <iostream>  6 #include <queue>
  7 #include <cstring>
  8 #include <cstdio>
  9 using namespace std;
 10 #define MAXV 1001
 11 #define MAXE 100000
 12 #define INF 100000000
 13 
 14 typedef struct {
 15 
 16   int v;
 17   int val;
 18   int next;
 19 }Edge;
 20 
 21 Edge e[MAXE];
 22 int p[MAXV], eid, n;
 23 
 24 void add(int u, int v, int val) {
 25 
 26   e[eid].next = p[ u ];
 27   e[eid].v    =      v;
 28   e[eid].val  =    val;
 29   p[u]        = eid ++;
 30 }
 31 
 32 //建立反向圖 為了計算啟發函數h(x)(即結點x到T的最短距離)
 33 Edge op[MAXE];
 34 int oph[MAXV], opid;
 35 
 36 void addop(int u, int v, int val) {
 37 
 38   op[opid].next = oph[ u ];
 39   op[opid].v    =        v;
 40   op[opid].val  =      val;
 41   oph[ u ]      =  opid ++;
 42 }
 43 
 44 
 45 int dis[MAXV], S, T, K;
 46 
 47 struct Node {
 48 
 49   int v;
 50   int val;
 51   friend bool operator <(Node a, Node b) {
 52 
 53     return a.val + dis[a.v] > b.val + dis[b.v];
 54   }
 55 };
 56 
 57 void init() {
 58 
 59     for(int i = 0; i <= n; ++ i) {
 60 
 61       p[ i ] = -1;
 62       dis[ i ] = INF;
 63       oph[ i ] = -1;
 64     }
 65     eid = 0;
 66     opid = 0;
 67 }
 68 
 69 void spfa() {
 70 
 71     dis[ T ] = 0;
 72     queue<int> Q;
 73     Q.push(T);
 74     while(!Q.empty()) {
 75 
 76       int u = Q.front();
 77           Q.pop();
 78           
 79       for(int j = oph[ u ]; j != -1; j = op[ j ].next) {
 80 
 81         int v = op[ j ].v;
 82         int val = op[ j ].val;
 83         if(dis[ v ] > dis[ u ] + val) {
 84 
 85            dis[ v ] = dis[ u ] + val;
 86            Q.push(v);
 87         }
 88       }
 89     }
 90 }
 91 
 92 void  A_star() {
 93 
 94   spfa();
 95   int vist[MAXV];
 96   if(dis[S] == INF) {
 97 
 98     puts("-1");
 99     return ;
100   }
101   memset(vist, 0sizeof(vist));
102   priority_queue<Node> Q;
103   Node t;
104   t.v = S;
105   t.val = 0;
106   Q.push(t);
107   int u;
108   int val;
109   while(!Q.empty()) {
110 
111     t = Q.top();
112     Q.pop();
113     u = t.v;
114     val = t.val;
115     
116     vist[ u ] ++;
117     
118     if(vist[ u ] > K) continue;
119     if(u == T && vist[ u ] == K) break;
120 
121     for(int j = p[ u ]; j != -1; j = e[ j ].next) {
122 
123         t.v = e[ j ].v;
124         t.val = val + e[ j ].val;
125         Q.push(t);
126     }
127   }
128   if(u == T && vist[ u ] == K) {
129 
130     printf("%d\n", val);
131     return ;
132   }
133   
134   puts("-1");
135 }
136 
137 int main() {
138 
139   int m;
140   while(~scanf("%d %d"&n, &m)) {
141 
142        init();
143        while(m --) {
144 
145          int u, v, val;
146          scanf("%d %d %d"&u, &v, &val);
147          add(u, v, val);
148          addop(v, u, val);
149        }
150        scanf("%d %d %d"&S, &T, &K);
151        if(S == T) K ++;
152        A_star();
153   }
154   return 0;
155 }

/*表示上面寫的不是SPFA, 貌似是BFS+DP,現在改正一下,效率提高了一點*/
void spfa() {

    
bool vist[MAXV];
    memset(vist, 
falsesizeof(vist));
    dis[ T ] 
= 0;
    queue
<int> Q;
    Q.push(T);
    
while(!Q.empty()) {

      
int u = Q.front();
          Q.pop();
      vist[ u ] 
= false;
      
for(int j = oph[ u ]; j != -1; j = op[ j ].next) {

        
int v = op[ j ].v;
        
int val = op[ j ].val;
        
if(dis[ v ] > dis[ u ] + val) {

           dis[ v ] 
= dis[ u ] + val;
           
if(!vist[ v ]) {
           
               vist[ v ] 
= true;
               Q.push(v);
           }

        }

      }

    }

}


struct Point {

    
int v;
    
int val;
    friend 
bool operator <(Point a, Point b) {
    
        
return a.val > b.val;
    }

}
;


void dijkstra() {

    
bool vist[MAXV];
    
int u;
    memset(vist, 
falsesizeof(vist));
    priority_queue
<Point> Q;
    Point t;
    t.v 
= T; t.val = 0;  Q.push(t);
    
while(!Q.empty()) {

      t 
= Q.top(); Q.pop();
      u 
= t.v;
      
if(vist[ u ]) continue;
      vist[ u ] 
= true;
      dis[ u ] 
= t.val;

      
for(int j = oph[ u ]; j != -1; j = op[ j ].next) {

        
int v = op[ j ].v;
        
if(!vist[ v ]) {

            
int val = op[ j ].val;
            Point tmp;
            tmp.v 
= v;
            tmp.val 
= t.val + val;
            Q.push(tmp);
        }

      }

    }

}

三者的效率SPFA最高,dijkstra次之,BFS+dp最慢;如果代碼有可以優化的地方請留言,謝謝

posted on 2011-04-25 19:22 此最相思 閱讀(1065) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美精品日韩综合在线| 久久蜜桃精品| 精品88久久久久88久久久| 国产精品系列在线播放| 国产精品人成在线观看免费| 欧美日韩一区二区三区视频 | 欧美另类在线观看| 欧美国产一区二区在线观看| 欧美美女福利视频| 国产九色精品成人porny| 国内一区二区在线视频观看 | 亚洲欧美第一页| 久久精品论坛| 欧美高清视频一区| 亚洲视频免费| 久久香蕉国产线看观看网| 欧美激情视频网站| 国产欧美一区二区三区另类精品| 国语自产精品视频在线看一大j8 | 国产精品私人影院| 激情国产一区| 亚洲午夜久久久| 久久偷看各类wc女厕嘘嘘偷窃| 欧美aa在线视频| 亚洲永久免费| 欧美国产欧美综合 | 国产精品99久久久久久久女警| 欧美一区2区视频在线观看| 美女视频黄a大片欧美| 亚洲乱码国产乱码精品精天堂| 国产精品99久久99久久久二8 | 极品尤物av久久免费看| 一本到高清视频免费精品| 久久久久久久国产| 一区二区精品在线| 美腿丝袜亚洲色图| 国产在线麻豆精品观看| 在线视频日韩精品| 欧美激情久久久久久| 午夜精品亚洲| 欧美午夜a级限制福利片| 亚洲欧洲日产国产综合网| 久久精品视频免费观看| 亚洲桃花岛网站| 欧美日韩国产综合网| 亚洲国产精品综合| 久久一综合视频| 午夜精品美女久久久久av福利| 欧美日韩高清一区| 亚洲作爱视频| 亚洲黄色在线视频| 久久精品一区中文字幕| 国产欧美日韩在线视频| 亚洲主播在线播放| 麻豆成人在线播放| 久久久精品日韩| 国产精品久久久久久一区二区三区| 91久久亚洲| 蜜桃伊人久久| 久久在线免费视频| 亚洲成色777777女色窝| 久久综合给合| 久久亚洲私人国产精品va媚药| 韩国av一区二区三区在线观看| 欧美在线亚洲在线| 欧美一区二区女人| 国产婷婷色一区二区三区| 欧美一区二区三区播放老司机| 亚洲视频精品在线| 国产欧美日韩视频| 久久综合九色99| 久久一区二区三区av| 最新国产拍偷乱拍精品| 最新日韩精品| 国产精品高清免费在线观看| 午夜视黄欧洲亚洲| 久久久久国产一区二区三区| 亚洲欧洲精品一区二区三区 | 宅男精品导航| 国内成人自拍视频| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久性色av| 中国成人亚色综合网站| 亚洲一区二区成人| 在线观看视频免费一区二区三区| 欧美激情欧美狂野欧美精品| 欧美日韩国产高清| 久久精品中文| 欧美日韩国产综合视频在线观看| 欧美一区二区黄色| 久久综合色影院| 亚洲在线播放电影| 久久久91精品国产| 一区二区三区欧美在线| 久久精品观看| 亚洲一区二区三区中文字幕在线| 欧美一区二区私人影院日本| 亚洲国产日韩欧美在线图片| 在线中文字幕一区| 136国产福利精品导航| 一区二区三区日韩欧美精品| 国模精品一区二区三区色天香| 亚洲激情成人| 国产最新精品精品你懂的| 日韩午夜中文字幕| 亚洲国产99精品国自产| 亚洲女女做受ⅹxx高潮| 夜夜嗨av一区二区三区免费区| 久久精品中文字幕一区| 亚洲综合日韩中文字幕v在线| 嫩草国产精品入口| 久久亚洲影院| 国产亚洲欧美日韩日本| 一区二区毛片| 亚洲淫性视频| 乱中年女人伦av一区二区| 亚洲欧美资源在线| 欧美国产精品中文字幕| 久久精品男女| 国产精品拍天天在线| 亚洲精品久久久久中文字幕欢迎你 | 欧美韩日高清| 韩国精品一区二区三区| 这里只有精品电影| 一区二区久久久久| 欧美www在线| 久久亚洲欧洲| 国产日产欧美a一级在线| 中文日韩欧美| 亚洲一区国产一区| 欧美日本久久| 亚洲电影免费| 亚洲国产美女| 亚洲美女在线看| 欧美高清在线观看| 亚洲精品欧美一区二区三区| 在线观看久久av| 鲁大师成人一区二区三区| 麻豆成人在线播放| 亚洲第一在线综合在线| 欧美aaaaaaaa牛牛影院| 欧美岛国激情| 亚洲毛片在线免费观看| 欧美黄色大片网站| 亚洲人成在线影院| 国产丝袜一区二区三区| 欧美诱惑福利视频| 久久久天天操| 亚洲二区视频| 欧美福利一区| 日韩视频在线观看免费| 亚洲线精品一区二区三区八戒| 欧美日韩精品二区| 中文一区二区在线观看| 欧美一区视频在线| 很黄很黄激情成人| 欧美国产一区二区在线观看| 亚洲人午夜精品| 一区二区三区四区五区视频| 国产精品爱啪在线线免费观看| 亚洲一区二区在线视频| 久久精品综合| 亚洲精品久久久一区二区三区| 欧美成人精品在线播放| av成人手机在线| 亚洲电影在线| 国产精品红桃| 久久久精品2019中文字幕神马| 欧美成人自拍| 亚洲欧美国产一区二区三区| 精久久久久久| 国产精品成人播放| 久久偷看各类wc女厕嘘嘘偷窃| 最新国产成人在线观看| 欧美一区二区三区精品| 99re视频这里只有精品| 国产日韩欧美日韩| 欧美激情中文不卡| 久久精品1区| 亚洲午夜久久久久久尤物| 一区二区国产日产| 亚洲午夜一二三区视频| 韩国在线一区| 欧美日韩一区在线观看视频| 午夜精品久久久久久| 亚洲二区三区四区| 香蕉久久夜色| 亚洲精选中文字幕| 一区国产精品| 国产精品亚洲成人| 欧美日韩国产999| 久久免费高清| 欧美一区免费视频| 制服诱惑一区二区| 亚洲国产高清自拍| 免费在线一区二区| 久久精品一二三| 欧美在线观看天堂一区二区三区| 99亚洲精品| 亚洲精品视频在线|