与えられた行列をチェックするC++コードが良いかどうか
1つのnxn行列があるとします。行列は、1に等しくないすべての数が、同じ行の数と同じ列の数の合計として表現できる優れた行列であると言われます。与えられたマトリックスが良いかどうかをチェックする必要があります。
したがって、入力が次のような場合
1 | 1 | 2 |
2 | 3 | 1 |
6 | 4 | 1 |
その場合、出力はTrueになります。これは、左下隅の6が有効であるためです。これは、その上の2と右の4の合計が有効であるためです。この行列の1に等しくないすべての数についても同じことが言えます。
ステップ
これを解決するには、次の手順に従います-
n := size of M for initialize i := 0, when i < n, update (increase i by 1), do: for initialize j := 0, when j < n, update (increase j by 1), do: ok := 0 if M[i, j] is not equal to 1, then: c := M[i, j] for initialize h := 0, when h < n, update (increase h by 1), do: for initialize k := 0, when k < n, update (increase k by 1), do: if c is same as M[i, h] + M[k, j], then: ok := 1 if ok is same as 0 and M[i, j] is not equal to 1, then: return false return true
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; bool solve(vector<vector<int>> M){ int n = M.size(); int c; bool ok; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++){ ok = 0; if (M[i][j] != 1) c = M[i][j]; for (int h = 0; h < n; h++){ for (int k = 0; k < n; k++) if (c == M[i][h] + M[k][j]) ok = 1; } if (ok == 0 && M[i][j] != 1){ return false; } } } return true; } int main(){ vector<vector<int>> matrix = { { 1, 1, 2 }, { 2, 3, 1 }, { 6, 4, 1 } }; cout << solve(matrix) << endl; }
入力
{ { 1, 1, 2 }, { 2, 3, 1 }, { 6, 4, 1 } }
出力
1
-
特定のツリーグラフが線形であるかどうかをC++で確認します
ここでは、ツリーグラフが線形であるかどうかを確認する方法を説明します。線形ツリーグラフは1行で表すことができます。これが線形ツリーグラフの例であると仮定します。 しかし、これは線形ではありません- グラフが線形であるかどうかを確認するには、2つの条件に従うことができます ノードの数が1の場合、ツリーグラフは線形です ノードの(n – 2)が次数2の場合 例 #include <iostream> #include <vector> #define N 4 using namespace std; class Graph{ p
-
与えられた二分木がAVL木であるかどうかをチェックするC++プログラム
AVLツリーは自己平衡二分探索木であり、左右のサブツリーの高さの差がすべてのノードで複数になることはありません。 これは、特定のバイナリツリーがAVLツリーであるかどうかを確認するためのC++プログラムです。 アルゴリズム Begin function AVL() returns true if the given tree is AVL otherwise false. if(root == NULL) return 1 leftheight = height(root->left) &nb