알고리즘을 이용한 행렬의 전치// 문제다운 문제네요.
역곡중
전치행렬 알고리즘을 이용하여 파일출력하는 프로그램인데요질문 내용 :
#include stdio.h
#include stdlib.h
#include time.h
#define max_terms 1000000
typedef struct{
int col;
int row;
int value;
} term;
term smarray[max_terms];
term smarray2[max_terms];
void transpose(term a[], term b[]);
void main(void){
file* fp1;
file* fp2;
int i,k=0;
clock_t start,finish;
start = clock();
fp1 = fopen(smarrdata.txt, rt);
fp2 = fopen(msoutput.txt,wt);
for(i=0;i1000000;i++){
fscanf(fp1,smarray[%d],&k);
fscanf(fp1,%d %d %d, &smarray[k].row, &smarray[k].col, &smarray[k].value);
fprintf(fp1, \r\n);
}
transpose(smarray, smarray2);
finish = clock();
fprintf(fp2, transpose takes %.2fms, (((double)(finish-start))/clocks_per_sec)*1000);
fclose(fp1);
fclose(fp2);
}
void transpose(term a[], term b[]){
file* fp2;
int n, i, j, k, currentb;
fp2 = fopen(smarrtrans_1.txt, wt);
n=a[0].value;
b[0].row = a[0].col;
b[0].col = a[0].row;
b[0].value = n;
if(n0){
currentb=1;
for(i=0;ia[0].col;i++)
for(j=1;j=n;j++)
if(a[j].col==i){
b[currentb].row=a[j].col;
b[currentb].col=a[j].row;;
b[currentb].value=a[j].value;
currentb++;
}
}
fprintf(fp2,smarray[n] r c v\r\n);
for(k=0;k=max_terms;k++){
fprintf(fp2, smarray[%d] %d %d %d\r\n, k, b[k].row, b[k].col, b[k].value);
}
fclose(fp2);
}일단
smarrdata.txt 는 대충 이렇습니다.
smarray[n] r c v
smarray[0] 1000 1000 1000000
smarray[1] 0 0 2
smarray[2] 0 1 2
smarray[3] 0 2 4
smarray[4] 0 3 4
smarray[5] 0 4 4
smarray[6] 0 5 3
smarray[7] 0 6 1
smarray[8] 0 7 2
smarray[9] 0 8 2
smarray[10] 0 9 3
smarray[11] 0 10 1
smarray[12] 0 11 2
smarray[13] 0 12 4
smarray[14] 0 13 0
smarray[15] 0 14 4
smarray[16] 0 15 1
smarray[17] 0 16 4
알고리즘 구현해서 쭈욱 프로그래밍하고 컴파일하고 실행하고 파일을 열어보니 웬걸요
보시는 것 처럼 중간중간에 구멍이 나네요;;;;
뭥미 왜 이런걸까요???
smarray[n] r c v
smarray[0] 1000 1000 1000000
smarray[1] 0 0 2
smarray[2] 0 1 0
smarray[3] 0 2 1
smarray[4] 0 3 2
smarray[5] 0 4 4
smarray[6] 0 0 0
smarray[7] 0 0 0
smarray[8] 0 5 4
smarray[9] 0 6 0
smarray[10] 0 7 0
smarray[11] 0 8 2
smarray[12] 0 0 0
smarray[13] 0 0 0
smarray[14] 0 9 1