ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SNS 2촌 계산
    코딩/C언어 2019. 3. 18. 19:14
    반응형
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    #include <stdlib.h> 
    #include <stdio.h> 
    #include <time.h> 
     
    #define NUM_OF_MEMBERS 15 // sns 가입자의 수 
     
    // 함수 원형 
    void print_links(int data[][NUM_OF_MEMBERS] );  
    void matrix_multiplication(int data[][NUM_OF_MEMBERS], int result[][NUM_OF_MEMBERS] );  
     
    int main(void) {
        int link_data[NUM_OF_MEMBERS][NUM_OF_MEMBERS] = { 0 }; //최초 link matrix 1촌의 matrix 
        int link_result[NUM_OF_MEMBERS][NUM_OF_MEMBERS] = { 0 }; //2촌까지의 관계가 표시된 matrix 
     
        int i = 0;         
        int j = 0;         
        int num_of_steps = 0;         
        int ALL_ONES = 0;
     
        //srand(100); // 같은 결과를 얻기위해서 일단 씨드를 100으로 설정(나중에는 주석처리해서 실행) 
        srand( (unsigned int)time(NULL) ); 
     
        // link_data 값 넣기: 자신은 모두 1촌이다         
        for(i = 0; i<NUM_OF_MEMBERS; i++ )         
        {                 
            link_data[i][i] = 1//i와 i의 관계는 1촌. 즉 1로 표시.         
        } 
     
        // link_data 값 넣기: random하게 수를 발생시켜서 1촌 친구를 설정한다.          
        for(i = 0; i<NUM_OF_MEMBERS; i++ ) //각 user마다 대락 4명의 친구가 있다고 가정.         
        {                 
            j=0;                 
            while ( j<2 ) //i가 두 개의 링크를 연결하고 i가 아닌 다른 user가 i와 연결                 
            {                         
                int new_link = rand()%NUM_OF_MEMBERS;                          
                if( new_link != i )                         
                {                                 
                    link_data[i][new_link] = 1//i와 new_link가 1촌이면                                 
                    link_data[new_link][i] = 1//new_linke와 i도 1촌.                                 
                    j++;                         
                }                 
            }         
        }         
        
        printf("=================================================================\n");         
        printf("Friends matrix\n");         
        printf("=================================================================\n");         
        print_links(link_data); //최초 1촌 관계 출력 
     
        matrix_multiplication(link_data, link_result);
     
        printf("=================================================================\n");         
        printf("Friends of friends matrix\n");         
        printf("=================================================================\n");         
        print_links(link_result); // 계산된 2촌까지의 관계 출력 
        
    void print_links(int data[][NUM_OF_MEMBERS])
    {
        int i, j;
     
        for (i = 0; i < NUM_OF_MEMBERS; i++)
        {
            for (j = 0; j < NUM_OF_MEMBERS; j++)
            {
                printf("%5d", data[i][j]);
            }
     
            printf("\n");
        }
    }
     
    void matrix_multiplication(int data[][NUM_OF_MEMBERS], int result[][NUM_OF_MEMBERS]) 
        int i, j, n;
     
        for (i = 0; i < NUM_OF_MEMBERS; i++)
        {
            for (j = 0; j < NUM_OF_MEMBERS; j++)
            {
                if (data[i][j] == 1)
                {
                    result[i][j] = 1;
     
                    for (n = 0; n < NUM_OF_MEMBERS; n++)
                        if (data[j][n] == 1)
                            result[i][n] = 1;
                }
            }
        }
    }
    cs

     

     

    결과:

     

    반응형
Designed by Tistory.