K-means 一维 C++

// k_means.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include "pch.h"
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
	cout << "请输入要分群的数字\n";
	vector<int> ori;
	string temp;
	getline(cin, temp);
	

	int m = 0;
	for (int i = 0; i < temp.length(); i++) {
		char t = temp[i];
		
		if(t != ' ') {
			m = m * 10 + (int)(t-48);
		}
		else {
			ori.push_back(m);
			m = 0;
		}
		if (i == temp.length()-1) {
			ori.push_back(m);
		}

	}

	
	int i1 = ori[0];
	int i2 = ori[1];
	//分群1,2
	vector<int>g1, g2;
	//c1,c2中心
	int c1 = 0, c2 = 0;
	while (i1!=c1||i2!=c2)
	{ 
		c1 = i1;
		c2 = i2;
		
		g1.clear();
		g2.clear();
		for (int i=0;i<ori.size();i++)
		{
			int abs1 = abs(i1 - ori[i]);
			int abs2 = abs(i2 - ori[i]);
			if (abs1 <=abs2 ) 
				g1.push_back(ori[i]);
			else 
				g2.push_back(ori[i]);
	
		}
		int sum = 0;
		for (int i = 0; i < g1.size(); i++) {
			sum += g1[i];
		}
		i1 = sum / g1.size();
		sum = 0;
		for (int i = 0; i < g2.size(); i++) {
			sum += g2[i];
		}
		i2 = sum / g2.size();
		
	}
	cout << "第一群:";
	for (int i = 0; i < g1.size(); i++) {
		cout << g1[i] << " ";
	}
	cout << endl<<"第二群:";
	for (int i = 0; i < g2.size(); i++) {
		cout << g2[i] << " ";
	}
	cout << endl;
	
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39874268/article/details/82946693