ツリーのプリューファーコードを作成するC++プログラム
プリューファーコードは、1からpまでのラベルを持つグラフ表現としてユーザーによって与えられたツリーを一意に識別します。このツリーは、ノードのp(値はユーザーによって指定されます)ラベルで構成されます。 p –2の値のシーケンスがあります。
アルゴリズム
Begin Declare i, j, ver, edg, minimum, p to the integer datatype. Print “Enter the number of vertexes: ”. Enter the value of ver. Initialize edg = ver-1. Declare EDG[edg][2], DG[ver+1] to the integer datatype. Initialize DG[ver+1] = {0}. Print “This tree has (value of edg) edges for (value of ver) vertexes”. Print “There are (value of edg) pairs of vertexes in the tree”. for(i = 0; i < edg; i++) Print "Enter the value of vertex pair for edge ". Print "Enter the value of V(1) vertex: ". Enter the value of EDG[i][0]. Print "Enter the value of V(2) vertex: ". Enter the value of EDG[i][1]. DG[EDG[i][0]]++. DG[EDG[i][1]]++. Print "The Prufer code for the tree is: { ". for(i = 0; i < ver-2; i++) minimum = 10000 for(j = 0; j < edg; j++) if(DG[EDG[j][0]] == 1) then if(minimum > EDG[j][0]) then minimum = EDG[j][0]. p = j. if(DG[EDG[j][1]] == 1) then if(minimum > EDG[j][1]) then minimum = EDG[j][1]. p = j. DG[EDG[p][0]]--. DG[EDG[p][1]]--. if(DG[EDG[p][0]] == 0) then Print the value of EDG[p][1]. else Print the value of EDG[p][0]. Print "}". End.
例
#include<iostream> using namespace std; int main() { int i, j, ver, edg, minimum, p; cout<<"Enter the number of vertexes: "; cin>>ver; cout<<endl; edg = ver-1; int EDG[edg][2], DG[ver+1] = {0}; cout<<"This tree has "<<edg<<" edges for "<<ver<<"vertexes.\n"; cout<<"There are "<<edg<<" pairs of vertexes in the three.\n"; for(i = 0; i < edg; i++) { cout<<"Enter the value of vertex pair for edge "<<i+1<<":\n"; cout<<"Enter the value of V(1) vertex: "; cin>>EDG[i][0]; cout<<"Enter the value of V(2) vertex: "; cin>>EDG[i][1]; DG[EDG[i][0]]++; DG[EDG[i][1]]++; } cout<<"\nThe Prufer code for the tree is: { "; // Print the prufer code of the given tree. for(i = 0; i < ver-2; i++) { minimum = 10000; for(j = 0; j < edg; j++) { if(DG[EDG[j][0]] == 1) { if(minimum > EDG[j][0]) { minimum = EDG[j][0]; p = j; } } if(DG[EDG[j][1]] == 1) { if(minimum > EDG[j][1]) { minimum = EDG[j][1]; p = j; } } } DG[EDG[p][0]]--; // Remove the selected vertex by decreasing its degree to 0. DG[EDG[p][1]]--; // Decrement the degree of other vertex, since we have removed the EDG. if(DG[EDG[p][0]] == 0) cout<<EDG[p][1]<<" "; else cout<<EDG[p][0]<<" "; } cout<<"}"; return 0; }
出力
Enter the number of vertexes: 5 This tree has 4 edges for 5vertexes. There are 4 pairs of vertexes in the three. Enter the value of vertex pair for edge 1: Enter the value of V(1) vertex: 2 Enter the value of V(2) vertex: 3 Enter the value of vertex pair for edge 2: Enter the value of V(1) vertex: 5 Enter the value of V(2) vertex: 6 Enter the value of vertex pair for edge 3: Enter the value of V(1) vertex: 7 Enter the value of V(2) vertex: 8 Enter the value of vertex pair for edge 4: Enter the value of V(1) vertex: 9 Enter the value of V(2) vertex: 10 The Prufer code for the tree is: { 4 8 4 }
-
C++プログラムのツリーでの祖先と子孫の関係のクエリ
この問題では、それぞれ2つの値iとjで構成されるN個の頂点ツリーとQ個のクエリが与えられます。私たちのタスクは、ツリー内の祖先と子孫の関係のクエリを解決するプログラムを作成することです。 各クエリを解決するには、ノードiがツリー内のノードjの祖先であるかどうかを確認する必要があります。 問題を理解するために例を見てみましょう 入力 Q = 2, query[][] = {{3, 5}, {1, 6}} 出力 No Yes 説明 i = 3, j = 5: The node 3 is not the ancestor of node 5. Return NO. i = 1, j =
-
sin(x)およびcos(x)の値を計算するC++プログラム
入力を角度として指定すると、指定した角度に対応するsin(x)とcos(x)の値を計算し、結果を表示することがタスクになります。 Sin(x)の場合 Sin(x)は、x角度の値を計算するために使用される三角関数です。 式 $$ \ sin(x)=\ displaystyle \ sum \ Limits_ {k =0} ^ \ infty \ frac {(-1)^ {k}} {(2k + 1)!} x ^ {2k + 1} $ $ Cos(x)の場合 Cos(x)は、x角度の値を計算するために使用される三角関数です。 式 $$ \ cos(x)=\ displays