Алгоритм Уоршалла
Код C++
//Matrix_adj.h
#ifndef _MATRIX_ADJ_H_
#define _MATRIX_ADJ_H_
#include <vector>
class AdjMatr
{
public:
AdjMatr()
{
VecAdj.resize(0);
VecPath.resize(0);
}
~AdjMatr(){}
void input();
void output(const std::vector<std::vector<int> >& Vec);
void resize(size_t size);
void find_path();
void copy_matr();
size_t set_size();
private:
std::vector<std::vector<int> > VecAdj;
std::vector<std::vector<int> > VecPath;
};
#endif /*ifndef Matrix_adj*/
Код C++
//Matrix_adj.cpp
#include "Matrix_adj.h"
#include <iostream>
#include <algorithm>
#include <iterator>
void AdjMatr::resize(size_t size)
{
VecAdj.resize(size);
for(size_t i=0; i<size; ++i)
VecAdj[i].resize(size);
}
void AdjMatr::copy_matr()
{
VecPath.resize(VecAdj.size());
for(size_t i=0; i!=VecAdj.size(); i++)
{
VecPath[i].resize(VecAdj[i].size());
std::copy(VecAdj[i].begin(), VecAdj[i].end(), VecPath[i].begin());
}
}
void AdjMatr::input()
{
size_t size=set_size();
resize(size);
for(size_t i=0; i<size; ++i)
{
for(size_t j=0; j<size; ++j)
{
if(i==j)
{
VecAdj[i][j]=0;
continue;
}
std::cout<<"Enter 1 for connect "<< i+1 <<" node with "<< j+1 <<" node and 0 for not\n";
std::cin>>VecAdj[i][j];
}
}
std::cout<<"Initial adj matrix\n";
output(VecAdj);
}
size_t AdjMatr::set_size()
{
size_t size;
std::cout<<"Enter size: ";
std::cin>>size;
return size;
}
void AdjMatr::output(const std::vector<std::vector<int> >& Vec)
{
for(size_t i=0; i<Vec.size(); ++i)
{
std::copy(Vec[i].begin(), Vec[i].end(), std::ostream_iterator<int>(std::cout, " "));
std::cout<<std::endl;
}
}
void AdjMatr::find_path()
{
copy_matr();
std::cout<<"Initial path matrix\n";
output(VecPath);
for(size_t k=0; k<VecPath.size(); ++k)
{
for(size_t i=0; i<VecPath.size(); ++i)
{
if(VecPath[i][k]==1)
{
for(size_t j=0; j<VecPath.size(); ++j)
{
VecPath[i][j]=(VecPath[i][j]||VecPath[k][j]);
}
}
}
}
std::cout<<"Path matrix\n";
output(VecPath);
}
Код C++
//Main.cpp
#include "Matrix_adj.h"
#include <iostream>
int main()
{
AdjMatr Ob;
Ob.input();
Ob.find_path();
system("pause");
return 0;
}
Комментарии:
Нету комментариев для вывода...