워셜 알고리즘을 실행할 수 있는 코드를 짜는건데 어디서 부터 잘못된건지 전혀 원하는 답이 나오지 않아요. 예를들어
2
3
100
010
000
4
1000
0010
1111
0000
했을때 결과 값이 나와야 하는데 배열을 입력하는것 부터가 다르게 나옵니다. 어디서부터 잘못된걸까요 도와주세요!
#include <stdio.h>
#include <stdlib.h>
#define MAX 10 // 배열크기 선행 처리
int main(void)
{
int num, v;
int array[MAX][MAX];
printf("\t--------------------------------------------------------\n");
printf("\t\tWarshall's Algorithm\n");
printf("\t--------------------------------------------------------\n\n");
printf("전체 데이터 수");
scanf("%d", &v); // 데이터파일에서 '전체 테스트 데이터 수' 입력
while (v > 0) { // 데이터 수만큼 배열 입출력 루프
printf("행렬의 크기");
scanf("%d", &num); // 데이터 파일에서 '행렬의 크기' 입력
for (int m = 0; m < num; m++) {
printf("행렬입력\n");
for (int n = 0; n < num; n++) {
scanf( "%d", &array[m][n]); // array[num][num]
} // 행렬의 크기만큼 for구문으로 데이터를 입력받음
}
/* Warshall's Algorithm */
for (int k = 0; k < num; k++) {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
array[i][j] = array[i][j] || (array[i][k] && array[k][j]);
}
} // i->j거리를 i->k + k+j, 즉 i->k->j 간의 거리로 저장한다.
}
printf("%d\n", num); // 실행결과 출력시 행렬의 크기 출력
for (int m = 0; m < num; m++) {
for (int n = 0; n < num; n++) {
printf("%2d", array[m][n]); // Warshall's Algorithm을 적용시킨 실행결과 출력
}
printf("\n");
}
v--; // 실행해야 할 남은 전체 테스트 데이터 수를 계산
}
return 0;
}