私はRow_wise_sumとColumn_wise_sumだけが与えられた0と1の2次元配列を満たすための一般的なロジックを探しています。二次元配列を塗りつぶすロジック
以下はサンプルコードですが、ロジックが動作しません。
ご注意:Colの配列の順序は関係ありません。 Rowの順序が重要であり、RowSumとColSumの順序はまったく同じであると言います。
もう1つの例外/条件は、すべての行が一意であることです。
RowSizeとColSizeが任意の値に変更されても、フィットするロジックが必要です。 10x10または4x8または2x9または7x4などとしましょう。
#include <stdio.h>
/*
0 1 1 1 1 | 4 --> Row wise totals, order is important
1 0 0 1 0 | 2
1 1 0 1 1 | 4
0 1 0 1 1 | 3
1 1 1 1 0 | 4
---------------------
3 4 2 5 3 --> Column wise totals, order is not important
*/
int main()
{
int i = 0;
int j = 0;
int RowSum[5] = {4, 2, 4, 3, 4};
int ColSum[5] = {3, 4, 2, 5, 3};
int matrix[5][5] = {0};
// Fill up the matrix
for(i=0; i<5; ++i)
{
for(j=0; j<5; ++j)
{
if(RowSum[i]>0 && ColSum[j]>0)
{
matrix[i][j] = 1;
RowSum[i]--;
ColSum[j]--;
}
}
}
// Print matrix
for(i=0; i<5; ++i)
{
printf("\n");
for(j=0; j<5; ++j)
{
printf(" %d ", matrix[i][j]);
}
}
// Validate RowSum
printf("\n\n");
for(i=0; i<5; ++i)
{
printf("\n RowSum[%d] = %d ", i+1, RowSum[i]);
if(RowSum[i] != 0)
printf("Invalid, must be 0");
}
// Validate ColSum
printf("\n\n");
for(i=0; i<5; ++i)
{
printf("\n ColSum[%d] = %d ", i+1, ColSum[i]);
if(ColSum[i] != 0)
printf("Invalid, must be 0");
}
printf("\n\n");
return 0;
}
/* Output
1 1 1 1 0
1 1 0 0 0
1 1 1 1 0
0 1 0 1 1
0 0 0 1 1
RowSum[1] = 0
RowSum[2] = 0
RowSum[3] = 0
RowSum[4] = 0
RowSum[5] = 2 Invalid, must be 0
ColSum[1] = 0
ColSum[2] = 0
ColSum[3] = 0
ColSum[4] = 1 Invalid, must be 0
ColSum[5] = 1 Invalid, must be 0
*/
ありがとうございます。
行の要素の順序を決定する要素は何ですか? – 0x499602D2
行と列の合計が一緒に判断できます。 –
@ musk'sあなたはそれを解決するアルゴリズムを求めています。それは思考と仕事が必要です。これまでに何を試しましたか? – coincoin