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

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 此最相思 閱讀(1064) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久精品亚洲一区| 亚洲综合色视频| 欧美精品日韩www.p站| 久久婷婷影院| 久久综合网hezyo| 美国十次成人| 欧美精品福利在线| 欧美视频福利| 国产美女精品人人做人人爽| 国产老女人精品毛片久久| 国产精品久久久久9999高清| 欧美视频手机在线| 国产精品一二三| 狠狠入ady亚洲精品| 在线精品视频一区二区| 99av国产精品欲麻豆| 一区二区三区黄色| 先锋影音一区二区三区| 久久av一区| 欧美电影免费| 99re热这里只有精品视频| 亚洲欧美日韩一区| 欧美大成色www永久网站婷| 亚洲欧洲一区二区在线观看| 欧美激情第8页| 亚洲一区黄色| 久久久激情视频| 欧美日韩免费看| 国产主播一区二区| 亚洲欧美国产77777| 老司机精品福利视频| 亚洲人成亚洲人成在线观看| 亚洲欧美日韩国产一区| 欧美精品97| 在线免费高清一区二区三区| 亚洲手机在线| 欧美a级片网站| 亚洲综合首页| 欧美顶级大胆免费视频| 激情欧美一区二区| 亚洲免费小视频| 亚洲高清视频一区| 久久av免费一区| 欧美午夜免费电影| 亚洲精品视频啊美女在线直播| 欧美一区二区三区免费大片| 亚洲经典自拍| 美女亚洲精品| 激情成人综合网| 欧美在线电影| 一区二区三区四区蜜桃| 欧美国产高潮xxxx1819| 韩国三级电影一区二区| 小嫩嫩精品导航| 亚洲婷婷国产精品电影人久久| 欧美成人69av| 亚洲福利av| 久久综合九色欧美综合狠狠| 亚洲一区二区在线免费观看| 国产精品久久毛片a| 夜色激情一区二区| 亚洲三级影院| 欧美精品激情| 一区二区三区四区在线| 亚洲国产精品久久久久久女王| 久久久久久久久一区二区| 国产亚洲成精品久久| 亚洲欧美视频一区| 中国女人久久久| 欧美午夜电影完整版| 中文一区二区| 9l国产精品久久久久麻豆| 欧美华人在线视频| 999亚洲国产精| 亚洲一区二区免费看| 国产欧美日韩麻豆91| 久久精品国产综合| 久久在线免费视频| 亚洲美女诱惑| 亚洲视频日本| 国产日韩欧美中文在线播放| 麻豆精品视频在线| 狼人天天伊人久久| 99精品黄色片免费大全| 亚洲一区二区三区四区中文| 国产一区导航| 亚洲国产欧美在线人成| 欧美日韩精品一区| 久久久久久网| 欧美成人免费播放| 午夜精品久久久久久99热软件| 香蕉免费一区二区三区在线观看| 国内精品99| 亚洲精品久久久久久久久| 国产精品乱码| 免费观看亚洲视频大全| 欧美日韩国产精品自在自线| 欧美有码视频| 欧美 日韩 国产一区二区在线视频 | 久久国产精品久久久久久久久久 | 嫩模写真一区二区三区三州| 欧美aa国产视频| 亚洲欧美在线免费| 久久久亚洲高清| 亚洲午夜成aⅴ人片| 欧美一区三区二区在线观看| 亚洲日韩欧美视频一区| 欧美亚洲三级| 99国产精品久久久久久久久久 | 牛人盗摄一区二区三区视频| 亚洲欧美视频在线观看| 久久久午夜精品| 先锋资源久久| 欧美激情综合色综合啪啪| 久久久久9999亚洲精品| 国产精品av久久久久久麻豆网| 免费在线欧美黄色| 国产欧美精品久久| 一本一道久久综合狠狠老精东影业| 国产自产v一区二区三区c| 亚洲视频日本| 亚洲天堂av在线免费| 麻豆av福利av久久av| 久久av资源网| 国产精品久久一级| 99精品热视频只有精品10| 亚洲黄色尤物视频| 久久精品国产综合精品| 欧美一区二区视频在线观看2020| 欧美日产在线观看| 亚洲第一精品电影| 亚洲清纯自拍| 欧美激情视频一区二区三区不卡| 欧美福利一区| 亚洲黄色一区| 欧美国产精品人人做人人爱| 美女国产精品| 亚洲黄色成人| 欧美日韩国产区一| 亚洲精品国产无天堂网2021| 亚洲精品一区二区三区不| 免费亚洲一区二区| 欧美激情视频一区二区三区不卡| 在线激情影院一区| 欧美国产日产韩国视频| 亚洲激情小视频| 一本色道久久综合狠狠躁篇的优点 | 亚洲另类一区二区| 欧美高清在线观看| 亚洲欧洲精品一区二区三区| 日韩视频一区二区| 欧美三级电影一区| 亚洲免费一级电影| 久久久久九九九| 亚洲大片精品永久免费| 免费毛片一区二区三区久久久| 亚洲第一区中文99精品| 最新亚洲一区| 欧美无砖砖区免费| 小处雏高清一区二区三区| 久久野战av| 亚洲精品护士| 国产精品久久波多野结衣| 亚洲欧美一区二区精品久久久| 久久久久久噜噜噜久久久精品 | 午夜天堂精品久久久久| 国产欧亚日韩视频| 久久躁日日躁aaaaxxxx| 亚洲国产成人在线| 亚洲午夜av电影| 国产有码一区二区| 美女国产精品| 99国产精品视频免费观看| 性色av香蕉一区二区| 精品999久久久| 欧美国产一区二区在线观看 | 欧美激情精品久久久久久黑人| 夜夜精品视频| 看欧美日韩国产| 99re66热这里只有精品4| 国产女人精品视频| 欧美sm视频| 欧美专区一区二区三区| 亚洲精品123区| 久久人人超碰| 亚洲一区二区三区中文字幕在线| 韩日欧美一区二区三区| 欧美日本精品| 久久久久久一区二区| 亚洲免费在线电影| 亚洲人午夜精品| 免播放器亚洲一区| 西西人体一区二区| 亚洲一二三区在线观看| 亚洲七七久久综合桃花剧情介绍| 国产乱人伦精品一区二区| 欧美国产视频日韩| 免费在线日韩av| 蜜桃久久精品乱码一区二区| 午夜精品视频一区|