Нужна ваша помощь. Необходимо реализовать CSR метод хранения симметричных разреженных матриц
Матрица считывается из файла matr, который выглядит следующим образом
7
9.0 0.0 0.0 3.0 1.0 0.0 1.0
0.0 11.0 2.0 1.0 0.0 0.0 2.0
0.0 2.0 10.0 2.0 0.0 0.0 0.0
3.0 1.0 2.0 9.0 1.0 0.0 0.0
1.0 0.0 0.0 1.0 12.0 0.0 1.0
0.0 0.0 0.0 0.0 0.0 8.0 0.0
1.0 2.0 0.0 0.0 1.0 0.0 8.0
где в 1ой строке указан размер матрицы
В результате должны получиться следующие 3 массива
AN: 9.0 3.0 1.0 1.0 11.0 2.0 1.0 2.0 10.0 2.0 9.0 1.0 12.0 1.0 8.0 8.0
JA: 0.0 3.0 4.0 6.0 1.0 2.0 3.0 6.0 2.0 3.0 3.0 4.0 4.0 6.0 5.0 6.0
IA: 0.0 4.0 8.0 10.0 12.0 14.0 15.0 16.0
Т.к матрица симметрична, то всю матрицу не нужно хранить, нужно только верхнюю треугольную построчно с диагональными элементами
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char **argv)
{int a;
int N=0;
int i,j,col=0;
float JA[100],IA[100];
float A[100][100];
FILE *file_f1=fopen("matr.txt", "rt");if (!file_f1) {cout << "No file"<<"\n";}
//файл чтения
fscanf(file_f1,"%d",&N);
cout<<N<<"\n"<< endl;
for(int i=0;i<N;i++)
{ for(int j=0;j<N;j++)
{
fscanf(file_f1,"%f",&A[i][j]);
if ((A[i][j]!=0) && (i<=j))
{ JA[j]=j;
cout<<"JA "<<JA[j]<<"\n"<< endl;
col+=1;
cout<<"AN "<<A[i][j]<<"\n"<< endl;
}
}
}
cout<<"col "<<col<<"\n"<< endl;
cin >> a;
fclose(file_f1);
cout << "Done..." << endl;
массивы AN и JA ищутся правильно. Как сформировать массив IA(номер, с которого в AN начинается новая строка?