グラフ構造化スタックを実装するC++プログラム
このC++プログラムでは、グラフ構造化スタックを実装します。
アルゴリズム
Begin Function graphStructuredStack(int **adjMat, int s,int bNode): Take an array adjMat, source s and bottom node bNode initialize stackFound = false for sVertex = 1 to noOfNodes for dVertex = 1 to noOfNodes this->adjMat[sVertex][dVertex] = adjMat[sVertex][dVertex] Done Done Push source into mystack. while (!mystack.empty()) element = mystack.top() Initialize destination, d=1 while (d <= noOfNodes) if (this->adjMat[element][d] == 1) Push destination into mystack par[d] = element this->adjMat[element][d] = 0 if (d == bNode) Set, stackFound = true Break done element = d d = 1 Continue done Increment d done if (stackFound) for node = bNode to node!=s push node into istack Push s into istack stackList.push_back(istack) update, stackFound = false done pop element from mystack done iterator = stackList.begin() while (iterator != stackList.end()) increment iterator while (!stack.empty()) print top element of stack pop element from stack done End.
サンプルコード
#include <iostream> #include <cstdlib> #include <stack> #include <list> using namespace std; class GraphStructuredStack { private: list< stack<int> > stackList; stack<int> mystack; int noOfNodes; int **adjMat; int *par; public: GraphStructuredStack(int noOfNodes) { this->noOfNodes =noOfNodes; adjMat = new int* [noOfNodes + 1]; this->par = new int [noOfNodes + 1]; for (int i = 0; i < noOfNodes + 1; i++) adjMat[i] = new int [noOfNodes + 1]; } void graphStructuredStack(int **adjMat, int s,int bNode) { bool stackFound = false; for (int sVertex = 1; sVertex <= noOfNodes; sVertex++) { for (int dVertex = 1; dVertex <= noOfNodes; dVertex++) { this->adjMat[sVertex][dVertex] = adjMat[sVertex][dVertex]; } } mystack.push(s); int element, d; while (!mystack.empty()) { element = mystack.top(); d = 1; while (d <= noOfNodes) { if (this->adjMat[element][d] == 1) { mystack.push(d); par[d] = element; this->adjMat[element][d] = 0; if (d == bNode) { stackFound = true; break; } element = d; d = 1; continue; } d++; } if (stackFound) { stack<int> istack; for (int node = bNode; node != s; node = par[node]) { istack.push(node); } istack.push(s); stackList.push_back(istack); stackFound = false; } mystack.pop(); } list<stack<int> >::iterator iterator; iterator = stackList.begin(); while (iterator != stackList.end()) { stack <int> stack = *iterator; iterator++; while (!stack.empty()) { cout<<stack.top()<<"\t"; stack.pop(); } cout<<endl; } } }; int main() { int noofnodes; cout<<"Enter number of nodes: "; cin>>noofnodes; GraphStructuredStack gss(noofnodes); int source, bottom; int **adjMatrix; adjMatrix = new int* [noofnodes + 1]; for (int i = 0; i < noofnodes + 1; i++) adjMatrix[i] = new int [noofnodes + 1]; cout<<"Enter the graph matrix: "<<endl; for (int sVertex = 1; sVertex <= noofnodes; sVertex++) { for (int dVertex = 1; dVertex <= noofnodes; dVertex++) { cin>>adjMatrix[sVertex][dVertex]; } } cout<<"Enter the source node: "; cin>>source; cout<<"Enter the bottom node: "; cin>>bottom; cout<<"The stacks are: "<<endl; gss.graphStructuredStack(adjMatrix, source, bottom); return 0; }
出力
Enter number of nodes: 4 Enter the graph matrix: 1 1 1 0 0 1 1 0 1 0 0 0 1 1 1 1 Enter the source node:3 Enter the bottom node: 1 The stacks are: 31
-
基数ソートを実装するC++プログラム
基数ソートは、非比較ソートアルゴリズムです。この並べ替えアルゴリズムは、同じ位置と値を共有する数字をグループ化することにより、整数キーで機能します。基数は、記数法のベースです。 10進法では、基数または基数は10であることがわかっているので、いくつかの10進数を並べ替えるには、数値を格納するために10個の位取りボックスが必要です。 基数ソート手法の複雑さ 時間計算量:O(nk) スペースの複雑さ:O(n + k) Input − The unsorted list: 802 630 20 745 52 300 612 932 78 187 Output &minus
-
配列を使用してスタックを実装するC++プログラム
スタックは、要素のコレクションを含む抽象的なデータ構造です。スタックはLIFOメカニズムを実装します。つまり、最後にプッシュされた要素が最初にポップアウトされます。スタック内の主要な操作のいくつかは-です。 プッシュ-これにより、データ値がスタックの最上位に追加されます。 ポップ-これにより、スタックの最上位のデータ値が削除されます ピーク-これはスタックの最上位のデータ値を返します 配列を使用してスタックを実装するプログラムは次のとおりです。 例 #include <iostream> using namespace std; int stack[100]