プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

正確にk個のエッジを持つ最短経路


1つの有向グラフには、頂点の各ペア間の重みが示され、2つの頂点uとvも提供されます。私たちのタスクは、頂点uから頂点vまでの最短距離を、正確にk個のエッジで見つけることです。

正確にk個のエッジを持つ最短経路

この問題を解決するために、頂点uから開始し、隣接するすべての頂点に移動し、k値をk-1として使用して隣接する頂点に対して繰り返します。

入力と出力

Input:
The cost matrix of the graph.
0 10 3 2
∞  0 ∞ 7
∞  ∞ 0 6
∞  ∞ ∞ 0

Output:
Weight of the shortest path is 9

アルゴリズム

shortKEdgePath(u, v, edge)

入力- 頂点uとv、およびいくつかのエッジ。

出力- 最短経路の距離。

Begin
   if edge = 0 and u = v, then
      return 0
   if edge = 1 and cost[u, v] ≠ ∞, then
      return cost[u, v]
   if edge <= 0, then
      return ∞
   set shortPath := ∞

   for all vertices i, do
      if cost[u, i] ≠ ∞ and u ≠ i and v ≠ i, then
         tempRes := shortKEdgePath(i, v, edge - 1)
         if tempRes ≠ ∞, then
            shortPath = minimum of shortPath and (cost[u,i]+tempRes
   done
   return shortPath
End

#include <iostream>
#define NODE 4
#define INF INT_MAX
using namespace std;

int cost[NODE][NODE] = {
   {0, 10, 3, 2},
   {INF, 0, INF, 7},
   {INF, INF, 0, 6},
   {INF, INF, INF, 0}
};

int minimum(int a, int b) {
   return (a<b)?a:b;
}

int shortKEdgePath(int u, int v, int edge) {
   if (edge == 0 && u == v)    //when 0 edge, no path is present            
      return 0;
   if (edge == 1 && cost[u][v] != INF)    //when only one edge, and (u,v) is valid
      return cost[u][v];
   if (edge <= 0)    //when edge is -ve, there are infinity solution        
      return INF;
   int shortPath = INF;

   for (int i = 0; i < NODE; i++) {    //for all vertices i, adjacent to u
      if (cost[u][i] != INF && u != i && v != i) {
         int tempRes = shortKEdgePath(i, v, edge-1);
         if (tempRes != INF)
            shortPath = minimum(shortPath, cost[u][i] + tempRes);
      }
   }
   return shortPath;
}

int main() {
   int src = 0, dest = 3, k = 2;
   cout << "Weight of the shortest path is " << shortKEdgePath(src, dest, k);
}

出力

Weight of the shortest path is 9

  1. 0-1 CプログラムのBFS(バイナリウェイトグラフの最短経路)?

    いくつかのノードと接続されたエッジを持つグラフがあるとします。各エッジには2進の重みがあります。したがって、重みは0または1になります。ソース頂点が指定されます。ソースから他の頂点への最短経路を見つける必要があります。グラフが以下のようになっていると仮定します- 通常のBFSアルゴリズムでは、すべてのエッジの重みは同じです。ここでは、いくつかは0で、いくつかは1です。各ステップで、最適な距離条件を確認します。ここでは、両端キューを使用してノードを格納します。そこで、エッジの重みを確認します。 0の場合は前に押し、そうでない場合は後ろに押します。より良いアイデアを得るためにアルゴリズムを

  2. FacebookはAIで正確に何をしていますか?

    Facebookが強力な独学のコンピューターでサイト上のすべての動きを監視しているという考えに少し驚かされた場合は、専用のAI研究所をあまり詳しく調べたくないかもしれません。 Facebookの写真のタグ付け、友達のおすすめ、フェイクニュースフィルター、タイムラインの並べ替え、その他の多くの機能はすべて、AIのバージョンに依存しています。月間21.9億人のアクティブユーザーが人間のチームだけで処理することは不可能であることを考えると、それは理にかなっていますが、FacebookがAIを製品に組み込んでいる規模と速度は一見の価値があります。 画像認識 顔識別と自動タグ付けは、Facebo