- ベストアンサー
C言語における対称行列の作り方は?
「0」「1」のみの数値を用いてC言語で対称行列を作成したいのですが、アルゴリズムを知っている方がいたら教えてください。
- red_devils
- お礼率77% (14/18)
- C・C++・C#
- 回答数3
- ありがとう数3
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なるほど、そういう意味でしたか^^ C99だと可変の配列サイズを渡せるのでしたよね? だから、10に固定にせずに変数で渡すほうがいいのでは? ==== #include <stdlib.h> int setsym(int n, int t[n][n]) { int i, j; for (i = 0; i < n; ++i) { t[i][i] = 0; for (j = 0; j < i; ++j) if ((float)rand() / RAND_MAX <= 0.2) t[i][j] = t[j][i] = 0; else t[i][j] = t[j][i] = 1; } } int main(void) { int a[10][10]; setsym(10, a); }
その他の回答 (2)
- mikaemi
- ベストアンサー率50% (33/65)
質問の意味がもう一つはっきりしませんが、ある次元の配列で、 値が0または1である対称な行列をすべて作りたいというのなら、 たとえば、以下のようにすればいいのではないですか? 対称だというのだから、ほんとは、N*(N+1)/2個の要素しか必要なくて、 N*(N+1)/2 個の要素に 0 か 1 を設定すれば、それで終わりなのですが。。 ====3x3の行列 #include <stdio.h> #define N 3 void print(int a[][N]) { int i, j; for (i = 0; i < N; ++i) { for (j = 0; j < N; ++j) printf("%d ", a[i][j]); putchar('\n'); } printf("---------------\n"); } void assign(int a[][N]) { int i, j; for (i = 0; i < N; ++i) for (j = i + 1; j < N; ++j) a[j][i] = a[i][j]; } void set(int i, int j, int a[][N]) { if (i == N - 1 && j == N - 1) { a[i][j] = 0; assign(a); print(a); a[i][j] = 1; assign(a); print(a); } else { int ii, jj; if (j < N - 1) { ii = i; jj = j + 1; } else { ii = i + 1; jj = ii; } a[i][j] = 0; set(ii, jj, a); a[i][j] = 1; set(ii, jj, a); } } int main(void) { int a[N][N]; set(0, 0, a); }
お礼
お答えありがとうございました。参考にさせていただいて以下のように作成しました。アドバイスありがとうございました。 int (int T[10][10]){ int x,i,j,count=1; float r; for(i=0;i<10;i++) { for(j=0;j<count;j++) { r = ((float)rand() / 32768.0); if(i==j) T[i][j] = 0; else { if(r <= 0.2) { T[i][j] = 1; T[j][i] = 1; } else { T[i][j] = 0; T[j][i] = 0; } } } count++; }
- asuncion
- ベストアンサー率33% (2126/6288)
正方行列 a[n][n] において、 a[i][j] と a[j][i] とが等しくなるようにしてください。
お礼
お答えありがとうございました。a[i][j] と a[j][i]を同じにすることは分かっていたのですが、ループのまわし方が分からなかったのです。
関連するQ&A
- 対称行列同士の積は対称行列?
対称行列Aと対称行列Bをかけたとします。 A(対称行列)×B(対称行列)=C その解Cは必ず対称行列になるのでしょうか? それとも、成らないのでしょうか?
- ベストアンサー
- 数学・算数
- 【C言語】行列のランク(階数)の求め方
閲覧して頂きありがとうございます。 C言語で行列のランク(階数)を求めたいのですが、標準関数には用意されていないみたいなので 自分で関数を作成したいのですが、どう作ればいいのかも困っている状態です。 例えば、値が0と1で構成された4×4の行列の場合の ランクを求めるにはどういったアルゴリズムで作成するのでしょうか? ご回答者様の手間にならない範囲でヒントやソースコード、参考サイトなどあれば ご教示お願いできないでしょうか。 漠然とした質問で申し訳ございませんが、よろしくお願いします。
- 締切済み
- C・C++・C#
- n✕n行列(非対称)の固有値問題のアルゴリズム
よろしくおねがいします。 タイトルの通り、 n✕n行列の固有値を求めるプログラムを作成しようと考えています。 ただし、行列は非対称行列とするためJacobi法等は使えません。 そこで、 このプログラムを作成する際の一般的なアルゴリズムを教えていただきたいです。 例えば、どういった法則を使うのか?などです。 具体的であればあるほどありがたいです。 しょぼい質問ですがお願いします。
- 締切済み
- 数学・算数
- 非正方行列の行列式をC言語で計算したいのですが。
非正方行列の行列式を求めたいのですがどのような式になるのでしょうか? また、これをC言語で作成しなければなりません。 プログラミングはほぼ初心者なので、回答者様の手間にならない程度で優しく回答していただければと思います。 宜しくお願いします。
- 締切済み
- C・C++・C#
- C言語で行列の演算するには?
C言語で行列を取り扱うにはどうしたらいいのですか? 二次元配列というのは行列の演算のことなのですか? 初心者なのでよく分からないのでなるべく丁寧に教えてもらえるとうれしいのですが。よろしくお願いします。
- 締切済み
- C・C++・C#
お礼
なるほど。そうすればいいのですね!色々とありがとうございました^^