<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      RodneyX

      博客園 首頁(yè) 新隨筆 聯(lián)系 訂閱 管理

      弗洛伊德算法是用于求解無(wú)負(fù)權(quán)回路的圖的任意一對(duì)頂點(diǎn)間最短路徑的算法,該算法采用的基本思想是動(dòng)態(tài)規(guī)劃(轉(zhuǎn)移方程就是cost[i][j] = cost[i][k] + cost[k][j] < cost[i][j] ? cost[i][k] + cost[k][j] : cost[i][j]

      算法步驟:令初始鄰接矩陣matrix[][]cost[][],對(duì)于每個(gè)頂點(diǎn)k,檢查以此為中轉(zhuǎn)頂點(diǎn),對(duì)每對(duì)頂點(diǎn)ij,若cost[i][k] + cost[k][j] < cost[i][j]則更新cost[i][j] = cost[i][k] + cost[k][j],并且同時(shí)記錄下這個(gè)中轉(zhuǎn)的頂點(diǎn)kpath[i][j]中,檢查完每個(gè)頂點(diǎn)即可

      代碼如下

      // 復(fù)用數(shù)據(jù)結(jié)構(gòu)鄰接矩陣,見(jiàn) http://www.rzrgm.cn/RodneyTang/p/19010305
      void floyd(adjMaxtrix &mGraph, int **&path, int **&cost)
      {
          path = (int **)malloc(sizeof(int *) * mGraph.vnum);
          cost = (int **)malloc(sizeof(int *) * mGraph.vnum);
          for (int i = 0; i < mGraph.vnum; ++i)
              path[i] = (int *)malloc(sizeof(int) * mGraph.vnum);
          for (int i = 0; i < mGraph.vnum; ++i)
              for (int j = 0; j < mGraph.vnum; ++j)
              {
                  path[i][j] = -1;
                  cost[i][j] = mGraph.matrix[i][j];
              }
      
          for (int k = 0; k < mGraph.vnum; ++k)
              for (int i = 0; i < mGraph.vnum; ++i)
                  for (int j = 0; j < mGraph.vnum; ++j)
                      if (cost[i][k] <= INT_MAX / 2 && cost[k][j] <= INT_MAX / 2 && cost[i][j] > cost[i][k] + cost[k][j])
                      {
                          cost[i][j] = cost[i][k] + cost[k][j];
                          path[i][j] = k;
                      }
      }
      
      int *floyd_path(int **path, int **cost, int u, int v, int vnum)
      {
          if (cost[u][v] == INT_MAX)
              return nullptr;
          int index = 1, *re_path = (int *)malloc(sizeof(int) * vnum), &r_index = index;
          for (int i = 0; i < vnum; ++i)
              re_path[i] = -1;
          _floyd_path(path, u, v, re_path, index);
          re_path[0] = u;
          re_path[index] = v;
          return re_path;
      }
      
      void _floyd_path(int **path, int u, int v, int *re_path, int &index)
      {
          if (path[u][v] == -1)
              return;
          int k = path[u][v];
          _floyd_path(path, u, k, re_path, index);
          re_path[index++] = k;
          _floyd_path(path, k, v, re_path, index);
      }
      

      關(guān)于路徑任意一對(duì)頂點(diǎn)uv間的最短路徑的查找方式是先找到path[u][v],其中path[u][v]指明了uv的最短路徑的中間頂點(diǎn),即path[u][v] = k,則有路徑u -> ... -> k ... -> v,這樣遞歸地查找<u, k><k , v>的中間頂點(diǎn)即可,規(guī)定path[i][j] = -1時(shí)無(wú)中間頂點(diǎn),即路徑是i -> j

      這個(gè)算法的時(shí)空復(fù)雜度都很顯然,不必多說(shuō)

      posted on 2025-08-09 16:41  RodneyX  閱讀(16)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 免费三级网站| 2021亚洲国产精品无码| 在线无码免费看黄网站| 无码国模国产在线观看免费| 国产一区二区三区的视频| 国产精品一区免费在线看| 午夜一区欧美二区高清三区| 在线看无码的免费网站| 国产精一品亚洲二区在线播放| 美欧日韩一区二区三区视频| 日本丰满少妇高潮呻吟| 亚洲免费成人av一区| 国产美女裸身网站免费观看视频| 久热综合在线亚洲精品| 国产综合精品一区二区三区| 麻花传媒在线观看免费| 国产毛片子一区二区三区| 99精品久久久中文字幕| 四虎精品视频永久免费| 国产成人精品亚洲一区二区| 无码囯产精品一区二区免费| 免费人成视频在线播放| 伊人久久大香线蕉综合网站| 中文有无人妻vs无码人妻激烈| 人妻无码| 99精品日本二区留学生| 亚洲国产综合一区二区精品| 2021亚洲va在线va天堂va国产| 色噜噜亚洲男人的天堂| 久久99九九精品久久久久蜜桃 | 97人妻无码一区| 女人张开腿无遮无挡视频| 亚洲日韩av无码| 亚洲精品色国语对白在线| 国产午夜福利在线视频| 无码高潮爽到爆的喷水视频app | AV免费网址在线观看| 国产中文字幕精品在线| 国产视频最新| 在线免费播放av日韩| 2021亚洲国产精品无码|