#include <stdio.h>
int main()
{
#if 0
희소행렬 (각각이 원소)
3 12 9
0 23 2
5 17 4
ordered list 차례 목록
원소들이 배열된 리스트. 각 원소들이 일정한 순서로 배열되는 것.
//열 증가
x y value
0 0 3
0 1 12
0 2 9
1 0 0
1 1 23
1 2 2
2 0 5
2 1 17
2 2 4
//행 증가
x y value
0 0 3
0 1 0
0 2 5
1 0 12
1 1 23
1 2 17
2 0 9
2 1 2
2 2 4
*희소행렬 sparse matrix: 0 이 아닌 값을 가진 원소들을 ordered list로 표현하면
원소들의 순서는 행의 인덱스가 증가하는 순서이며,
행의 인덱스가 같은 경우 열의 인덱스가 증가하는 순서이다.
//----------------------------------------------------
두 행렬의 원소들의 첨자 (i,j)와 (x,y)과 주어졌을 때
원소들의 순서를 비교하는 function은 어떻게 작성할까요?
A 행렬
0 2
3 5
i j
0 0 0
0 1 3
1 0 2
1 1 5
B 행렬
7 5
3 3
x y
0 0 7
0 1 3
1 0 5
1 1 3
#endif
int matrix [3][3]= {
{3, 12, 9},
{0, 23, 2},
{5, 17, 4}
};
int array [100][3] = {0x00,};
int i;
int j;
printf("열 증가\n");
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("%d %d %d\n", i, j, matrix[i][j]);
}
}
printf("\n");
printf("행 증가\n");
int cnt = 0;
for(i=0; i<3; i++)
{
for(j=0; j<3; j++)
{
printf("%d %d %d\n", i, j, matrix[j][i]);
array[cnt][0] = i;
array[cnt][1] = j;
array[cnt][2] = matrix[j][i];
cnt++;
}
}
printf("\n");
printf("행 증가\n");
int MAX = cnt;
for(i=0; i<MAX; i++)
{
printf("%d %d %d\n", array[i][0], array[i][1], array[i][2]);
//
if((array[i][1] == 1) && (array[i][2] == 2))
{
printf("i, j를 입력했을때. 원소의 순서 : i:%d j:%d 순서:%d <<--- 이 순서값을 비교하는게 답인듯 ㅇ_ㅇ;;\n", array[i][1], array[i][2], array[i][0]);
}
}
printf("\n");
//---------------------------------------------
int mA [2][2]= {
{0, 2},
{3, 5}
};
int mB [2][2]= {
{7, 5},
{3, 3}
};
int aA [100] = {0x00,};
int aB [100] = {0x00,};
printf("두 행렬의 원소\n");
cnt = 0;
for(i=0; i<2; i++)
{
for(j=0; j<2; j++)
{
printf("%d %d %d %d\n", i, j, mA[j][i], mB[j][i]);
aA[cnt] = mA[j][i];
aB[cnt] = mB[j][i];
cnt++;
}
}
printf("\n");
printf("두 행렬의 원소 순서를 비교 - 테스트\n");
int m;
int n;
MAX = 4; //원소의 갯수
cnt = 0;
for(m=0; m<4; m++)
{
for(n=0; n<4; n++)
{
if(aA[cnt] > aB[cnt])
{
printf("aA > aB : %d %d\n", aA[cnt], aB[cnt]);
}
else if(aA[cnt] == aB[cnt])
{
printf("aA == aB : %d %d\n", aA[cnt], aB[cnt]);
}
else
{
printf("aA < aB : %d %d\n", aA[cnt], aB[cnt]);
}
cnt++;
}
}
printf("\n");
printf("두 행렬의 원소들의 첨자 (i,j)와 (x,y)과 주어졌을 때 원소들의 값을 비교\n");
MAX = 2; //원소의 갯수
cnt = 0;
for(i=0; i<MAX; i++)
{
for(j=0; j<MAX; j++)
{
if(mA[j][i] > mB[j][i])
{
printf("mA > mB : %d %d [j:%d][i:%d] > [j:%d][i:%d]\n", mA[j][i], mB[j][i], j, i, j, i);
}
else if(mA[j][i] == mB[j][i])
{
printf("mA == mB : %d %d [j:%d][i:%d] > [j:%d][i:%d]\n", mA[j][i], mB[j][i], j, i, j, i);
}
else
{
printf("mA < mB : %d %d [j:%d][i:%d] > [j:%d][i:%d]\n", mA[j][i], mB[j][i], j, i, j, i);
}
cnt++;
}
}
printf("\n");
return 0;
}