#include#include typedef struct Node { double x; double y; int n; } Node; typedef struct lNode { struct Node k[100]; } lNode; lNode s[100]; lNode s1[100]; double a[100]; // x的中心值 double b[100]; // y的中心值 int m[100] = {0}; //求每一项属于哪一个簇 void compare(int K, lNode *s, int c) { int i, j; double n[100]; double min; for (i = 1; i <= K; i++) { n[i] = sqrt(pow(fabs(s[c].k[c].x - a[i]), 2) + pow(fabs(s[c].k[c].y - b[i]), 2)); } min = n[1]; j = 1; for (i = 1; i <= K; i++) { if (n[i] < min) { min = n[i]; j = i; } } m[j] = m[j] + 1; s1[j].k[m[j]] = s[c].k[c]; } int main() { s[1].k[1].n=1; s[1].k[1].x=1; s[1].k[1].y=1; s[2].k[2].n=2; s[2].k[2].x=2; s[2].k[2].y=1; s[3].k[3].n=3; s[3].k[3].x=1; s[3].k[3].y=2; s[4].k[4].n=4; s[4].k[4].x=2; s[4].k[4].y=2; s[5].k[5].n=5; s[5].k[5].x=4; s[5].k[5].y=3; s[6].k[6].n=6; s[6].k[6].x=5; s[6].k[6].y=3; s[7].k[7].n=7; s[7].k[7].x=4; s[7].k[7].y=4; s[8].k[8].n=8; s[8].k[8].x=5; s[8].k[8].y=4; int K, z; int v; double averageX1[100] = {0}; double averageY1[100] = {0}; printf("请输入要生成几个簇:"); scanf("%d", &K); for (z = 1; z <= K; z++) { printf("第%d个簇的第一个中心值:", z); scanf("%d", &v); a[z] = s[v].k[v].x; b[z] = s[v].k[v].y; averageX1[z] = a[z]; averageY1[z] = b[z]; } int i; int j; int flag = 1; int temp = 0; int p = K + 1; while (flag) { //分簇的操作 for (i = 1; i <= 8; i++) { compare(K, &s, i); } printf("产生的新簇:"); for (i = 1; i <= K; i++) { printf("{"); for (j = 1; j <= m[i]; j++) { if (j < m[i]) printf("%d,", s1[i].k[j].n); if (j == m[i]) printf("%d", s1[i].k[j].n); } printf("} "); } for(i = 1; i <= K; i++) { for(j = 1; j <= m[i]; j++) { averageX1[p] = averageX1[p] + s1[i].k[j].x; averageY1[p] = averageY1[p] + s1[i].k[j].y; } averageX1[p] = averageX1[p] / (1.0 * m[i]); averageY1[p] = averageY1[p] / (1.0 * m[i]); printf("簇%d产生的新的平均值:%.3lf,%.3lf ",i,averageX1[p], averageY1[p]); p++; } printf("n"); for(i = 1; i <= K; i++) { if (averageX1[i + K] == averageX1[i] && averageY1[i + K] == averageY1[i]) { temp++; } } if(temp == K) { flag = 0; } else { for(i = 1; i <= K; i++) { averageX1[i] = averageX1[i + K]; averageY1[i] = averageY1[i + K]; a[i] = averageX1[i + K]; b[i] = averageY1[i + K]; } for(i = 1; i <= K; i++) { averageX1[i + K] = 0; averageY1[i + K] = 0; m[i] = 0; p = K + 1; temp = 0; } } } return 0; }
运行结果:



