输入点的个数即可,C语言,动态可视化,依次画图连线
#include<stdio.h>
#include<math.h>
#include <graphics.h>
#include <conio.h>
#include<stdlib.h>
#include <time.h>
#define MAX 1.79769e+308
typedef struct Points {
int n;
double P[30][2];
int x1, y1;
int x2, y2;
}MinPoints;
MinPoints Point_In(MinPoints m)
{
srand(time(0));
printf("请输入点的数目: \n");
scanf("%d", &m.n);
//printf("请输入点的坐标: \n");
for (int i = 0; i < m.n; i++)
{
//scanf("%lf", &m.P[i][0]);
//scanf("%lf", &m.P[i][1]);
m.P[i][0] = rand() % 640;
m.P[i][1] = rand() % 480;
}
return m;
}
MinPoints Point_Search(MinPoints m)
{
double mind = MAX;
double distance;
for (int i = 0; i < m.n - 1; i++)
for (int j = i + 1; j < m.n; j++)
{
distance = (m.P[j][0] - m.P[i][0])*(m.P[j][0] - m.P[i][0]) + (m.P[j][1] - m.P[i][1])*(m.P[j][1] - m.P[i][1]);
if (distance < mind)
{
mind = distance;
m.x1 = m.P[i][0];
m.y1 = m.P[i][1];
m.x2 = m.P[j][0];
m.y2 = m.P[j][1];
}
}
return m;
}
void Point_Out(MinPoints m)
{
initgraph(640, 480);
setorigin(0, 0);
setbkcolor(WHITE);
setlinestyle(PS_SOLID, 1);
for (int i = 0; i < m.n; i++)
{
setfillcolor(BLUE);
fillcircle(m.P[i][0], m.P[i][1], 2);
}
for (int i = 0; i < m.n; i++)
for (int j = i + 1; j < m.n; j++)
{
setlinecolor(RED);
line(m.P[i][0], m.P[i][1], m.P[j][0], m.P[j][1]);
Sleep(100);
cleardevice();
for (int i = 0; i < m.n; i++)
{
setfillcolor(BLUE);
fillcircle(m.P[i][0], m.P[i][1], 2);
}
}
line(m.x1, m.y1, m.x2, m.y2);
_getch();
closegraph();
}
int main()
{
MinPoints min = { min.x1 = 0, min.y1 = 0,min.x2 = 0, min.y2 = 0 };
min = Point_In(min);
min = Point_Search(min);
Point_Out(min);
return 0;
}