说明:矩阵在data.txt文件中,用空格分开;width 是矩阵的宽度,根据情况改变。
//版本2
#include
#include
#include
using namespace std;
#define width 6
void cal(int ** arr1, int ** arr2, int ** ret);
void print(int ** ret);
void main()
{
ifstream fin("data.txt");
string s;
int i,j,k;
//申请资源
int ***ret = new int**[width];
for(i=0;i {
ret[i] = new int*[width];
for(j=0;j ret[i][j] = new int[width];
}
i = 0;
j = 0;
while(fin>>s)
{
ret[0][i][j] = atoi(s.c_str()); //读取文件数据装入数组
j++;
if(j == width)
{
i++;
j = 0;
}
}
//计算两个矩阵的行列式
for(i=0;i cal(ret[0],ret[i],ret[i+1]);
//计算距离矩阵(从i到j需要的最短跳数)
int **dis = new int*[width];
for(i=0;i dis[i] = new int[width];
for(i=0;i {
for(j=0;j {
if(i==j)
{
dis[i][j] = 0;
}
else
{
for(k=0;k {
if(ret[k][i][j]!=0)
{
dis[i][j] = k+1;
break;
}
}
if(k==width)
dis[i][j] = -1;
}
}
}
//打印各阶矩阵值
for(i=0;i {
cout< print(ret[i]);
cout< }
//打印距离矩阵
cout<<"Distance:"< print(dis);
cout<
//释放资源
for(i=0;i {
for(j=0;j delete [] ret[i][j];
delete [] ret[i];
}
delete [] ret;
delete []dis;
}
//计算两个矩阵的行列式
void cal(int ** arr1, int ** arr2, int ** ret)
{
int temp;
for(int i=0;i for(int j=0;j {
temp = 0;
for(int k = 0;k temp +=arr1[i][k]*arr2[k][j];
ret[i][j] = temp;
}
}
//打印矩阵的值
void print(int ** ret)
{
for(int i=0;i {
for(int j=0;j {
cout< }
cout< }
}
//--------------------------------------
//版本1
#include
#include
#include
using namespace std;
#define width 6
void cal(int ** arr1, int ** arr2, int ** ret);
void print(int ** ret);
void main()
{
#if 0
ifstream fin("data.txt");
const int LINE_LENGTH = 100;
char str[LINE_LENGTH];
while(fin.getline(str,LINE_LENGTH))
{
cout<<"read from file:"< }
#endif
#if 0
ifstream fin("data.txt");
string s;
while(getline(fin,s))
{
cout<<"read from file:" < }
#endif
#if 1
ifstream fin("data.txt");
string s;
int i,j;
int **arr = new int*[width];
for(i=0;i arr[i] = new int[width];
i = 0;
j = 0;
while(fin>>s)
{
// cout< arr[i][j] = atoi(s.c_str()); //读取文件数据装入数组
j++;
if(j == width)
{
i++;
j = 0;
}
}
int **ret2 = new int*[width];
int **ret3 = new int*[width];
int **ret4 = new int*[width];
int **ret5 = new int*[width];
int **ret6 = new int*[width];
for(i=0;i {
ret2[i] = new int[width];
ret3[i] = new int[width];
ret4[i] = new int[width];
ret5[i] = new int[width];
ret6[i] = new int[width];
}
cal(arr,arr,ret2);
cal(arr,ret2,ret3);
cal(ret2,ret2,ret4);
cal(ret2,ret3,ret5);
cal(ret3,ret3,ret6);
cout<<"1:"< print(arr);
cout<<"\n2:"< print(ret2);
cout<<"\n3:"< print(ret3);
cout<<"\n4:"< print(ret4);
cout<<"\n5:"< print(ret5);
cout<<"\n6:"< print(ret6);
for(i = 0;i {
delete [] arr[i];
delete [] ret2[i];
delete [] ret3[i];
delete [] ret4[i];
delete [] ret5[i];
delete [] ret6[i];
}
delete []arr;
delete []ret2;
delete []ret3;
delete []ret4;
delete []ret5;
delete []ret6;
#endif
}
//----------
void cal(int ** arr1, int ** arr2, int ** ret)
{
int temp;
for(int i=0;i for(int j=0;j {
temp = 0;
for(int k = 0;k temp +=arr1[i][k]*arr2[k][j];
ret[i][j] = temp;
}
}
void print(int ** ret)
{
for(int i=0;i {
for(int j=0;j {
cout< }
cout< }
}
阅读(1994) | 评论(0) | 转发(0) |