1.流程图
2.代码执行过程
未运行时的该程序的文件目录,只有一个文本文件(initialfile)
该程序文件目录下的写有初始矩阵的文本文件
程序运行后在该文件目录下生成了一个新的文本文件(resultfile)
新的文本文件(resultfile)写有Warshall算法处理后的传递闭包矩阵
3.程序源码
#include<iostream>
using namespace std;
#include<fstream>
#define filename1 "initialfile.txt" //初始文件名
#define filename2 "resultfile.txt" //生成文件名
//矩阵类,对相关函数封装处理
class Matrix
{
public:
//构造函数中建立动态二维数组
Matrix(int len)
{
this->len = len;
element = new int* [len];
for (int i = 0; i < len; i++)
{
element[i] = new int[len];
}
for (int i = 0; i < len; i++)
for (int k = 0; k < len; k++)
{
element[i][k] = 0;
}
}
//析构函数中删除二维数组
~Matrix()
{
for (int i = 0; i < len; i++)
{
delete[]element[i];
}
delete[]element;
}
//重载输出流,方便在文件中写入矩阵数据
friend ostream& operator<<(ostream& os, const Matrix& A)
{
for (int i = 0; i < A.len; i++)
{
for (int k = 0; k < A.len; k++)
{
os << A.element[i][k] << " ";
}
os << endl;
}
return os;
}
//重载输入流,方便从文件中读取矩阵数据
friend istream& operator>>(istream& is, Matrix& A)
{
for (int i = 0; i < A.len; i++)
{
for (int k = 0; k < A.len; k++)
{
is >> A.element[i][k];
}
}
return is;
}
//从初始文件中读取矩阵
void Read_File()
{
ifstream fin(filename1, ios::in);
if(fin.is_open())
fin >> (*this);
fin.close();
}
//将运行后得到的矩阵写入生成文件
void Result_File()
{
ofstream fout(filename2, ios::out);
if(fout.is_open())
fout << (*this);
fout.close();
}
//Warshall算法处理
void Warshall()
{
int i, j, k;
int** temp = new int* [len];
for (i = 0; i < len; i++)
temp[i] = new int[len];
for (k = 0; k < len; k++)
{
for (i = 0; i < len; i++)
{
for (j = 0; j < len; j++)
{
temp[i][j] = (element[i][j]) || (element[i][k] && element[k][j]);
}
}
for (i = 0; i < len; i++)
for (j = 0; j < len; j++)
element[i][j] = temp[i][j];
}
for (i = 0; i < len; i++)
delete[]temp[i];
delete[]temp;
}
public:
int** element;
int len;
};
int main()
{
Matrix X(5); //创建5×5的矩阵
X.Read_File(); //读取文件中的矩阵
X.Warshall(); //进行Warshall算法处理
X.Result_File(); //写入文件
}