#include <fstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
#include <bitset>
using namespace std;
const int kMaxID = 1000;
typedef struct comp
{
bool operator()(const pair<int, int>& p1, const pair<int, int>& p2) const
{//按照合作伙伴的数量从大到小排序,如果数目相同,则id号小的排在前面
return ( p1.second > p2.second
|| (p1.second == p2.second && p1.first < p2.first) );
}
}comp_t;
//邻居
typedef struct co_pair
{
int i1; //第一个
int i2; //第二个
co_pair(int _i1, int _i2)
: i1(_i1), i2(_i2)
{}
}co_pair_t;
typedef struct comp1
{
bool operator()(const pair<co_pair, int>& p1, const pair<co_pair, int>& p2) const
{//按照邻居的数量从大到小排序,如果数目相同,则第一个客户的id号小的排在前面,
//如果第一个id号相同,则第二个id号小的排在前面
return ( p1.second > p2.second
|| (p1.second == p2.second && (p1.first.i1 < p2.first.i1
|| (p1.first.i1 == p2.first.i1
&& p1.first.i2 < p2.first.i2) )));
}
}comp1_t;
int main()
{
//文件
ifstream f1;
ofstream f2, f3;
//1.txt为输入,可以自行设置
f1.open("C:/1.txt", ios::in);
//2.txt输出第一个要求
f2.open("C:/2.txt", ios::out | ios::trunc);
//3.txt输出第二个要求
f3.open("C:/3.txt", ios::out | ios::trunc);
//counter表示一个客户同几个其它的客户有合作,pair的first表示客户的id,second表示合作数
vector<pair<int, int> > counter(kMaxID+1);
size_t i;
for (i = 0; i < counter.size(); i++)
{
counter[i].first = i;
counter[i].second = 0;
}
//coordinators[i]表示同这个客户有关联的客户,使用位图存储,如果位为1,则表示两个客户有合作
vector<bitset<kMaxID> > coordinators(kMaxID+1);
//读入f1文件
int i1, i2;
while (f1 >> i1 >> i2)
{
if (coordinators[i1].test(i2) == 0)
{
counter[i1].second++;
}
if (coordinators[i2].test(i1) == 0)
{
counter[i2].second++;
}
coordinators[i1].set(i2);
coordinators[i2].set(i1);
}
//输出f2文件
//排序
sort(counter.begin(), counter.end(), comp_t());
for (i = 0; i < counter.size() && counter[i].second > 0; i++)
{
f2 << counter[i].first << " " << counter[i].second << endl;
}
//计算f3文件的输出
//f3_outs表示两个客户有多少个邻居
vector<pair<co_pair, int> > f3_outs;
bitset<kMaxID> b;
size_t bits_set = 0;
for (size_t j = 0; j < counter.size() && counter[j].second > 0; j++)
{
for (size_t k = j+1; k < counter.size() && counter[k].second > 0; k++)
{
int i1 = counter[j].first;
int i2 = counter[k].first;
if (coordinators[i1].test(i2) == 0)
{//如果两个客户之间没有合作关系,看看它们是否有邻居关系
b = coordinators[i1] & coordinators[i2];
if ((bits_set = b.count()) > 0)
{//有邻居关系
f3_outs.push_back(make_pair<co_pair, int>(co_pair(i1, i2), (int)bits_set));
}
}
}
}
//输出f3
sort(f3_outs.begin(), f3_outs.end(), comp1_t());
for (i = 0; i < f3_outs.size() && f3_outs[i].second > 0; i++)
{
f3 << f3_outs[i].first.i1 << " " << f3_outs[i].first.i2 << " " << f3_outs[i].second << endl;
}
f1.close();
f2.close();
f3.close();
return 0;
}
程序可以运行,可是为什么生成的文件是空白文档?求助