편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2020.11.24

    c언어 초보입니다. 2차원 배열 워셜알고리즘


    워셜 알고리즘을 실행할 수 있는 코드를 짜는건데 어디서 부터 잘못된건지 전혀 원하는 답이 나오지 않아요. 예를들어

    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;
    }
    
  • 프로필 김수빈님의 편집
    날짜2020.11.24

    c언어 초보입니다.. 2차원 배열 워셜알고리즘


    워셜 알고리즘을 실행할 수 있는 코드를 짜는건데 어디서 부터 잘못된건지 전혀 원하는 답이 나오지 않아요..ㅜㅜ 예를들어

    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;
    }