
全対最短経路(フロイドのアルゴリズム)のプログラムを作成したんですが、以下のようなメッセージが出てしまい、どこが悪いのかさっぱりわかりません。どなたかご教授願えないでしょうか?
<プログラム>
#include<stdio.h>
#define NC 999 /* It should be large enough. */
#define N 5
void floyd(int, int [][], int [][], int [][]);
int W[N][N] = {
{ 0, 1, NC, 1, 5 },
{ 9, 0, 3, 2, NC },
{ NC, NC, 0, 4, NC },
{ NC, NC, 2, 0, 3 },
{ 3, NC, NC, NC, 0 },
};
int P[N][N];
int D[N][N];
main()
{
floyd(N, W, D, P);
}
void floyd(int n, int W[][], int D[][], int P[][])
{
int i, j, k;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
P[i][j] = 0;
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
D[i][j] = W[i][j];
}
}
for(k=0;k<n;k++){
for(i=0;i<n;j++){
for(j=0;j<n;j++){
if(D[i][k]+D[k][j]<D[i][j]){
P[i][j] = k;
D[i][j] = D[i][k] + D[k][j];
}
}
}
}
printf("?nall pairs of the shortest pathes:?n");
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%3d ", D[i][j]);
}
printf("?n");
}
printf("?n");
}
<エラーメッセージ>
In function `floyd':
:30: error: invalid use of array with unspecified bounds
:36: error: invalid use of array with unspecified bounds
:43: error: invalid use of array with unspecified bounds
:44: error: invalid use of array with unspecified bounds
:45: error: invalid use of array with unspecified bounds
:54: error: invalid use of array with unspecified bounds
No.3
- 回答日時:
taka_tetsu さんに補足します。
[No2 taka_tetsu さんの回答より]
> ちなみに要素数が不定でいいのは、n次元配列のn次元目のみです。
> で、次元数Nじゃなくて要素数Nね。
要するに、こんな感じですよね。
void floyd(int n, int W[][N], int D[][N], int P[][N])
ちなみに、この本当の意味は次のようになります。
# ほら、C って配列をそのまま関数に渡すことできないから、
# 先頭要素のポインタを渡すでしょう?
void floyd(int n, int (*W)[N], int (*D)[N], int (*P)[N])
このように、配列の仮定義に限り、配列とポインタは同義になります。
# この場合、「配列(要素数N)の配列」=「配列(要素数N)へのポインタ」
# ということになります。
# ちなみに、配列とポインタの読替えは再帰的には行われませんので
# ご注意を。。。
No.1
- 回答日時:
>void floyd(int n, int W[][], int D[][], int P[][])
2次元配列の1次元目はサイズが決まっている必要があります。次元数Nを指定してください。
void floyd(int n, int W[N][N], int D[N][N], int P[N][N])
こうしとけば確実です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 並列プログラミングのπ計算について 1 2022/07/16 22:30
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- MySQL 参考書に従って入力したつもりでしたが、最後はエラーがでました。 1 2022/09/28 03:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
system関数がうまくいかない
-
未解決の外部シンボル _printf...
-
マルチスレッドでバグが発生します
-
return 1L
-
c言語マップ探査ゲーム プログ...
-
c言語についてですが
-
数字列を3桁ごとにカンマで区切...
-
比較回数と交換回数表示について
-
エクセル関数で
-
数値を入力して1からその数値ま...
-
c言語で「5人の学生の学籍番号...
-
課題でつまってます・・・
-
int型の表せる範囲
-
(int *)の意味
-
パスカルのピラミッドを作りた...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報