• 大小: 2.11MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-04
  • 语言: C/C++
  • 标签: C++  

资源简介

在Windows平台下,用C++编写的邮局选址问题,可以选择出任意多个地址,内嵌聚类算法,可以运行。

资源截图

代码片段和文件信息

#include “MailAddress.h“
#include 
#include 
#include 
using namespace std;

MailAddress::MailAddress()
{
getData();

}


MailAddress::~MailAddress()
{
addresses.clear();
}

void MailAddress::getData()
{
char fname[256];
cout << “请输入存放数据的文件名:“< cin >> fname;
cout << endl;
ifstream in(fname ios_base::in);
if (!in)
{
cout << “can not open this file!“ << endl;
exit(0);
}
while (in.get()!=EOF)
{
CData data;
in >> data.x;
in >> data.y;
addresses.push_back(data);

in.close();
}
void MailAddress::showVector(vector v)
{
for (int i = 0; i < v.size(); i++)
{
cout << “(“ << v[i].x << ““ << v[i].y << “)“ << endl;
}
}
void MailAddress::showAddress()
{
for (int i = 0; i < addresses.size(); i++)
{
cout << “(“ << addresses[i].x<< ““ << addresses[i].y << “)“ << endl;
}
}
void MailAddress::showDestination()
{
cout << “(“ << dx << ““ << dy << “)“ << endl;
}
void MailAddress::execute(int m_k)
{
k = m_k;
vector *clusters = new vector[k];
CData *means = new CData[k];
int i = 0;
//默认一开始将前K个元组的值作为k个簇的质心(均值)
for ( i = 0; i < k; i++)
{
means[i].x = addresses[i].x;
means[i].y = addresses[i].y;
}
int lable = 0;
//根据默认的质心给簇赋值  
for (i = 0; i < addresses.size(); i++)
{
lable = clusterOfTuple(means addresses[i]);
clusters[lable].push_back(addresses[i]);
}
//输出刚开始的簇 
for (lable = 0; lable < k; lable++)
{
cout << “第“ << lable + 1 << “个簇:“ << endl;
vector t = clusters[lable];
showVector(t);
cout << endl;
}
double oldVar = -1;
double newVar = getVar(clusters means);
while (abs(newVar - oldVar) >= 1) //当新旧函数值相差不到1即准则函数值不发生明显变化时,算法终止
{
for (i = 0; i < k; i++)  //更新每个簇的中心点
{
means[i] = getMeans(clusters[i]);
cout << “means[“ << i << “]:“ << means[i].x << “  “ << means[i].y << endl;
}
oldVar = newVar;
newVar = getVar(clusters means);  //计算新的准则函数值
for ( i = 0; i < k; i++)
{
clusters[i].clear();   //清空每个簇
}
//根据新的质心获得新的簇 
for ( i = 0; i < addresses.size(); i++)
{
lable = clusterOfTuple(means addresses[i]);
clusters[lable].push_back(addresses[i]);
}
//输出当前的簇 
for ( lable = 0; lable < k; lable++)
{
cout << “第“ << lable + 1 << “个簇:“ << endl;
vector t = clusters[lable];
showVector(t);
cout << endl;
}
}
}

//根据质心,决定当前元组属于哪个簇 
int MailAddress::clusterOfTuple(CData means[] CData tuple)
{
double dist = getDist(means[0] tuple);
double tmp;
int lable = 0; //标示属于哪一个簇  
for (int i = 1; i < k; i++)
{
tmp = getDist(means[i] tuple);
if (tmp < dist)
{
dist = tmp;
lable = i;
}
}
return lable;
}

//获得给定簇集的平方误差
double MailAddress::getVar(vector clusters[] CData means[])
{
double var = 0;
for (int i = 0; i < k; i++)
{
vector t = clusters[i];
for (int j = 0; j < t.size(); j++)
{
var += getDist(t[j] means[i]

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     126976  2015-03-28 21:48  MailAddress\Debug\MailAddress.exe

     文件     928880  2015-03-28 21:48  MailAddress\Debug\MailAddress.ilk

     文件    1477632  2015-03-28 21:48  MailAddress\Debug\MailAddress.pdb

     文件         24  2015-03-24 14:31  MailAddress\input_assign01_01.dat

     文件         59  2015-03-24 21:44  MailAddress\input_assign01_03.dat

     文件        290  2015-03-24 21:44  MailAddress\input_assign01_05.dat

     文件        393  2015-03-24 21:45  MailAddress\input_assign01_06.dat

     文件         26  2015-03-28 21:35  MailAddress\input_assign_01_02.dat

     文件        149  2015-03-24 21:44  MailAddress\input_assign_01_04.dat

     文件       2383  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.log

     文件     404163  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.obj

     文件       1714  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\cl.command.1.tlog

     文件      37122  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\CL.read.1.tlog

     文件       3920  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\CL.write.1.tlog

     文件       1332  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\link.command.1.tlog

     文件       2870  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\link.read.1.tlog

     文件        636  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\link.write.1.tlog

     文件        178  2015-03-28 21:48  MailAddress\MailAddress\Debug\MailAddress.tlog\MailAddress.lastbuildstate

     文件     153286  2015-03-28 21:48  MailAddress\MailAddress\Debug\test.obj

     文件     286685  2015-03-24 14:53  MailAddress\MailAddress\Debug\test2.obj

     文件     379904  2015-03-28 21:48  MailAddress\MailAddress\Debug\vc120.idb

     文件     446464  2015-03-28 21:48  MailAddress\MailAddress\Debug\vc120.pdb

     文件         24  2015-03-24 14:31  MailAddress\MailAddress\input_assign01_01.dat

     文件         59  2015-03-24 21:44  MailAddress\MailAddress\input_assign01_03.dat

     文件        290  2015-03-24 21:44  MailAddress\MailAddress\input_assign01_05.dat

     文件        393  2015-03-24 21:45  MailAddress\MailAddress\input_assign01_06.dat

     文件         26  2015-03-28 21:35  MailAddress\MailAddress\input_assign_01_02.dat

     文件        149  2015-03-24 21:44  MailAddress\MailAddress\input_assign_01_04.dat

     文件       5346  2015-03-28 21:48  MailAddress\MailAddress\MailAddress.cpp

     文件        991  2015-03-24 21:46  MailAddress\MailAddress\MailAddress.h

............此处省略16个文件信息

评论

共有 条评论