#include #include #include #include using namespace std; struct Point { vector val; int id; string tag; }; int N,Attr,K,MaxIteration; vector vec; vector center; vector> Clusters; double getDistance(Point& a,Point& b) { if(a.val.size()!=b.val.size()) return -1; double dis=0; size_t sz=a.val.size(); for(size_t i=0;i& a,vector& b) { double sumA=0,sumB=0; for(auto idx:a) ///类群中的各个点 { for(auto idPos:vec.at(idx).val) /// 点的每个维度 { sumA+=idPos; } } for(auto idx:b) { for(auto idPos:vec.at(idx).val) { sumB+=idPos; } } return sumA> newCluster(center.size()); for(size_t i=0;idis) { minID=j; minDistance=dis; } } newCluster.at(minID).push_back(i); } sort(newCluster.begin(),newCluster.end(),ClusterCmp); #ifdef _OUTPUT_ITER cout<<"===============Iteration "<>N>>Attr>>K>>MaxIteration; for(int i=0;i>tmp; p.val.push_back(tmp); } cin>>p.tag; p.id=i; vec.push_back(p); } cout<<"Please Select Seed From Input..."<>temp; center.push_back(vec.at(temp)); } KMeans(); return 0; } /** 15 3 3 100 1 1 0.5 中国 0.3 0 0.19 日本 0 0.15 0.13 韩国 0.24 0.76 0.25 伊朗 0.3 0.76 0.06 沙特 1 1 0 伊拉克 1 0.76 0.5 卡塔尔 1 0.76 0.5 阿联酋 0.7 0.76 0.25 乌兹别克斯坦 1 1 0.5 泰国 1 1 0.25 越南 1 1 0.5 阿曼 0.7 0.76 0.5 巴林 0.7 0.68 1 朝鲜 1 1 0.5 印尼 1 9 12 */