一道算法题 关于离散数学的关系逆,合成Warshall算法的 程序写出来了 编译链接没错 运行怎么不行求高手指 10
#include<iostream>#include<vector>#include<fstream>#include<sstream>usingnamespacestd...
#include<iostream>
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
typedef vector<vector<int> > Mat;
Mat inputa()
{//读入关系矩阵
ifstream in("0.txt");
Mat a;
for(string s;getline(in,s);)
{
vector<int>b;
istringstream sin(s);
for(int ia;sin>>ia;)
b.push_back(ia);
a.push_back(b);
}
return a;
}
Mat inputb()
{//读入关系矩阵
ifstream in("1.txt");
Mat e;
for(string s;getline(in,s);)
{
vector<int>f;
istringstream sin(s);
for(int ia;sin>>ia;)
f.push_back(ia);
e.push_back(f);
}
return e;
}
void print(const Mat &a)
{//输出关系矩阵
for(int i=0;i<a.size();++i)
{
for(int j=0;j<a[i].size();++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void Guanxi_ni(Mat &a)
{//关系的逆运算
for(int i=0;i<a.size();i++)
for(int j=0;j<i;j++)
{
int temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
print(a);
}
void Guanxi_hc(Mat &a,Mat &b)
{//关系的合成
Mat c;
if(a[0].size()!=b.size())
{
cout<<"a行数与b列数不等;不能合成"<<endl;
return;
}
for(int i=0;i<a.size();i++)
{
for(int m=0;m<b[0].size();m++)
{
int sum=0;
for(int j=0;j<b.size();j++)
{
if(a[i][j]*b[j][m])
{
sum=1;
break;
}
}
c[i][m]=sum;
}
}
print(c);
}
void Warshall(Mat &a)
{
int j=0; //j为列
while(j<a.size())
{
for(int i=0;i<a.size();i++)
if(a[i][j]==1)
for(int k=0;k<a.size();k++)
a[i][k]=a[i][k]+a[j][k];
j++;
}
print(a);
}
void main()
{
Mat a,b;
a=inputa();
b=inputa();
Guanxi_ni(a);
Guanxi_hc(a,b);
// Warshall(a);
}
其实不会啊 编译前要创个文本 0和1的txt;输入矩阵
即关系;然后下面是设一个二维向量从文件读入关系
接着就是三个函数分别处理三种运算 怎么运行不出结果 高手给点建议啊 展开
#include<vector>
#include<fstream>
#include<sstream>
using namespace std;
typedef vector<vector<int> > Mat;
Mat inputa()
{//读入关系矩阵
ifstream in("0.txt");
Mat a;
for(string s;getline(in,s);)
{
vector<int>b;
istringstream sin(s);
for(int ia;sin>>ia;)
b.push_back(ia);
a.push_back(b);
}
return a;
}
Mat inputb()
{//读入关系矩阵
ifstream in("1.txt");
Mat e;
for(string s;getline(in,s);)
{
vector<int>f;
istringstream sin(s);
for(int ia;sin>>ia;)
f.push_back(ia);
e.push_back(f);
}
return e;
}
void print(const Mat &a)
{//输出关系矩阵
for(int i=0;i<a.size();++i)
{
for(int j=0;j<a[i].size();++j)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void Guanxi_ni(Mat &a)
{//关系的逆运算
for(int i=0;i<a.size();i++)
for(int j=0;j<i;j++)
{
int temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
print(a);
}
void Guanxi_hc(Mat &a,Mat &b)
{//关系的合成
Mat c;
if(a[0].size()!=b.size())
{
cout<<"a行数与b列数不等;不能合成"<<endl;
return;
}
for(int i=0;i<a.size();i++)
{
for(int m=0;m<b[0].size();m++)
{
int sum=0;
for(int j=0;j<b.size();j++)
{
if(a[i][j]*b[j][m])
{
sum=1;
break;
}
}
c[i][m]=sum;
}
}
print(c);
}
void Warshall(Mat &a)
{
int j=0; //j为列
while(j<a.size())
{
for(int i=0;i<a.size();i++)
if(a[i][j]==1)
for(int k=0;k<a.size();k++)
a[i][k]=a[i][k]+a[j][k];
j++;
}
print(a);
}
void main()
{
Mat a,b;
a=inputa();
b=inputa();
Guanxi_ni(a);
Guanxi_hc(a,b);
// Warshall(a);
}
其实不会啊 编译前要创个文本 0和1的txt;输入矩阵
即关系;然后下面是设一个二维向量从文件读入关系
接着就是三个函数分别处理三种运算 怎么运行不出结果 高手给点建议啊 展开
若以下回答无法解决问题,邀请你更新回答
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询