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

ランダムエッジ選択の方法でランダムグラフを作成するC++プログラム


このプログラムでは、ランダムな頂点とエッジに対してランダムなグラフが生成されます。このプログラムの時間計算量はO(v * e)です。ここで、vは頂点の数、eはエッジの数です。

アルゴリズム

Begin
   Develop a function GenRandomGraphs(), with ‘e’ as the
   number of edges and ‘v’ as the number of vertexes, in the argument list.
   Assign random values to the number of vertex and edges of the graph, Using rand() function.
      Print the connections of each vertex, irrespective of the direction.
      Print “Isolated vertex” for the vertex having no degree.
End

#include<iostream>
#include<stdlib.h>
using namespace std;
void GenRandomGraphs(int NOEdge, int NOVertex) {
   int i, j, edge[NOEdge][2], count;
   i = 0;
   //Assign random values to the number of vertex and edges of the graph, Using rand().
   while(i < NOEdge) {
      edge[i][0] = rand()%NOVertex+1;
      edge[i][1] = rand()%NOVertex+1;
      //Print the connections of each vertex, irrespective of the direction.
      if(edge[i][0] == edge[i][1])
         continue;
      else {
         for(j = 0; j < i; j++) {
            if((edge[i][0] == edge[j][0] && edge[i][1] == edge[j][1]) || (edge[i][0] == edge[j][1] && edge[i][1] == edge[j][0]))i--;
         }
      }
      i++;
   }
   cout<<"\nThe generated random graph is: ";
   for(i = 0; i < NOVertex; i++) {
      count = 0;
      cout<<"\n\t"<<i+1<<"-> { ";
      for(j = 0; j < NOEdge; j++) {
         if(edge[j][0] == i+1) {
            cout<<edge[j][1]<<" ";
            count++;
         } else if(edge[j][1] == i+1) {
            cout<<edge[j][0]<<" ";
            count++;
         } else if(j== NOEdge-1&& count == 0)cout<<"Isolated Vertex!";
         //Print “Isolated vertex” for the vertex having no degree.
      }
      cout<<" }";
   }
}
int main() {
   int i, e, n;
   cout<<"Random graph generation: ";
   n= 7 + rand()%6;
   cout<<"\nThe graph has "<<n<<" vertices";
   e = rand()%((n*(n-1))/2);
   cout<<"\nand has "<<e<<" edges.";
   GenRandomGraphs(e, n);
}

出力

Random graph generation:
The graph has 8 vertices
and has 18 edges.
The generated random graph is:
   1-> { 5 4 2 }
   2-> { 4 8 6 3 1 5 }
   3-> { 5 4 7 2 }
   4-> { 2 3 7 1 8 5 }
   5-> { 3 1 7 4 2 8 }
   6-> { 2 8 7 }
   7-> { 4 3 5 6 }
   8-> { 2 6 4 5 }

  1. BFSを使用して有向グラフの接続性をチェックするC++プログラム

    グラフの接続性を確認するために、トラバーサルアルゴリズムを使用してすべてのノードをトラバースしようとします。トラバーサルの完了後、アクセスされていないノードがある場合、グラフは接続されていません。 有向グラフの場合、接続を確認するためにすべてのノードからトラバースを開始します。 1つのエッジに外側のエッジのみがあり、内側のエッジがない場合があるため、ノードは他の開始ノードからアクセスされません。 この場合、トラバーサルアルゴリズムは再帰的なBFSトラバーサルです。 入力 −グラフの隣接行列 0 1 0 0 0 0 0 1 0 0

  2. BFSを使用して無向グラフの接続性をチェックするC++プログラム

    グラフの接続性を確認するために、トラバーサルアルゴリズムを使用してすべてのノードをトラバースしようとします。トラバーサルの完了後、アクセスされていないノードがある場合、グラフは接続されていません。 無向グラフの場合、1つのノードを選択し、そこからトラバースします。 この場合、トラバーサルアルゴリズムは再帰的なBFSトラバーサルです。 入力 −グラフの隣接行列 0 1 1 0 0 1 0 1 1 0 1 1 0 1 1 0 1 1 0 1 0 0 1 1 0