2100
3130
0527
0090
这个程序对于三对角矩阵都是有效的,为了精简代码可以考虑用链表的方式动态存储矩阵数据,由于程序已经完成,本次未采用链表,看着代码比较冗长
#include
#include<iomanip>
#include<fstream>
#include<string>
#include<cstdlib>
using namespacestd;
intmain()
{
fstreammatrix;
int row = 0, colume;//row表示矩阵的行数,column表示矩阵的列数
int n;//矩阵的维数
int bandwidth;//bandwidth表示矩阵的带宽
int j=0;//提取矩阵三对角的循环控制变量
stringfile_number;//从文件当中提取每一行矩阵
stringp;//提取每一列矩阵
int** number;//用来保存提取的二维数组
int* band_matrix;//用来保存带状矩阵的一维数组
matrix.open("1.txt");//打开存储带状矩阵的文件
while (!matrix.eof())//循环读取矩阵文件当中的每一行
{
row++;//统计矩阵的行数
colume = 1;//统计矩阵的列数
getline(matrix, file_number);//读取每一行矩阵作为字符串存入file_number变量当中
for (unsigned int i = 0; i < file_number.length(); i++)
{
if (file_number[i] != ' ')
{
p += file_number[i];//读取到非空格字符即是数字,将元素作为字符串存入变量p中
}
if (file_number[i] == ' ')
{
colume++;//遇见空格则行数加1
cout<< p << " ";//输出前面得到的矩阵元素
p = "";//将变量p重置为空,以便于存储下一个矩阵元素
}
}
cout<< p << 'n';//由于矩阵文件的每一行末尾使用'n'结尾的,所以矩阵每行的最后一个元素需要在此单独输出
p = "";//将变量p重置为空,以便于存储下一个矩阵元素
}
matrix.close();//关闭存储带状矩阵的文件
if (row != colume)
{
cout<< "请输入方阵,然后重新运行本程序!" <<endl;
system("pause");
return 0;
}
n = row;//输出矩阵的维数
cout<< "输入矩阵的行数为:" << row <<endl;
cout<< "输入矩阵的列数为:" << colume <<endl;
cout<< "输入矩阵的维数为:" << n <<endl;
bandwidth = 3 * row - 2;//计算三对角矩阵的带宽
number = new int*[bandwidth];
for (int i = 0; i < bandwidth; i++)
number[i] = new int[3];
row = 0;//重置行
colume = 0;//重置列
matrix.open("1.txt");//再次打开存储带状矩阵的文件
while (!matrix.eof())
{
row++;
colume = 1;
getline(matrix, file_number);
for (unsigned int i = 0; i < file_number.length(); i++)
{
if (file_number[i] != ' ')
{
p += file_number[i];
}
if (file_number[i] == ' ')
{
switch (row - colume)
{
case 1:case 0:case -1:
number[j][0] = row;
number[j][1] = colume;
number[j][2] =atoi(p.c_str());
j++;
break;
}
colume++;
p = "";
}
}
switch (row - colume)
{
case 1:case 0:case -1:
number[j][0] = row;
number[j][1] = colume;
number[j][2] =atoi(p.c_str());
j++;
break;
}
p = "";
}
matrix.close();//关闭存储带状矩阵的文件
band_matrix = new int[bandwidth];//从堆中申请动态空间用一维数组的方式存储带状元素
for (int i = 0; i < bandwidth; i++)
{
switch (number[i][0] - number[i][1])
{
case 1:
band_matrix[number[i][0] - 2] = number[i][2];
break;
case 0:
band_matrix[n + number[i][0] - 2] = number[i][2];
break;
case -1:
band_matrix[2 * n + number[i][0] - 2] = number[i][2];
break;
default:
break;
}
}
for (int i = 0; i < bandwidth; i++)
{
cout<< band_matrix[i] << " ";
}
cout << endl;
delete[] band_matrix;
for (int i = 0; i < bandwidth; i++)
{
delete[] number[i];
}
delete[] number;
system("pause");
return 0;
}
原文链接: https://www.cnblogs.com/liusuanyatong/p/11259920.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/225007
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!