課題を貼っとく。

(4)
#include
#include
#define N 5
int main(void){
//無限はintのとれる最大の値とした。
int rti = 2147483647;

//D(1)=Wをつくる。
int W[N][N];

int i, j, k, h = 0;
int D[N][N],DD[N][N];
for(i = 0; i < N; i++){
for(k = 0; k < N; k++){
printf("W[%d][%d] = ", i, k);
scanf("%d",&W[i][k]);
DD[i][k] = W[i][k];
D[i][k] = W[i][k];
}
}

for(h = 0; h < N - 1; h++){
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
for(k = 0; k < N; k++){
if(DD[i][j] > D[i][k] + W[k][j]){
DD[i][j] = D[i][k] + W[k][j];
}
}
}
}
//D(m-1)をD(n)にする
for(i = 0; i < N; i++){
for(j = 0; j < N; j++)
D[i][j] = DD[i][j];
}

//表示用
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ",D[i][j]);
}
printf("\n");
}
}
return(0);
}

(5)
#include
#include
#define N 5
int main(void){
//無限はintのとれる最大の値と考えます。

//D(1)=Wをつくる。
int W[N][N];

int i, j, k, h = 0;
int D[N][N],DD[N][N];
for(i = 0; i < N; i++){
for(k = 0; k < N; k++){
printf("W[%d][%d] = ", i, k);
scanf("%d",&W[i][k]);
DD[i][k] = W[i][k];
D[i][k] = W[i][k];
}
}

int n = N;

while(n >= 1){
if(n % 2 == 1){
for(i = 0; i D[i][k] + W[k][j]){
DD[i][j] = D[i][k] + W[k][j];
}
}
}
}
//D(m-1)をD(n)にする
for(i = 0; i < N; i++){
for(j = 0; j < N; j++)
D[i][j] = DD[i][j];
}

for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
for(k = 0; k < N; k++){
if(DD[i][j] > D[i][k] + W[k][j]){
DD[i][j] = D[i][k] + W[k][j];
}
}
}
}
//D(m-1)をD(n)にする
for(i = 0; i < N; i++){
for(j = 0; j < N; j++)
D[i][j] = DD[i][j];
}
}
n /= 2;
}
//表示用
for(i = 0; i < N; i++){
for(j = 0; j < N; j++){
printf("%d ",D[i][j]);
}
printf("\n");
}
return(0);
}