最近点对问题蛮力法(可视化)

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<graphics.h>
#define MAX 50

int X1, X2, Y1, Y2;
TCHAR s[5];
struct {
int x, y;
}zuobiao[MAX];

void display(double distance) {

settextcolor(RED);
_stprintf(s, _T("%f"), distance);		// 高版本 VC 推荐使用 _stprintf_s 函数
settextcolor(RED);
outtextxy(10, 580, s);

outtextxy(115, 580, '(');
_stprintf(s, _T("%d"), X1);
outtextxy(120, 580, s);
outtextxy(155, 580, ',');
_stprintf(s, _T("%d"), Y1);
outtextxy(160, 580, s);
outtextxy(185, 580, ')');

outtextxy(215, 580, '(');
_stprintf(s, _T("%d"), X2);
outtextxy(220, 580, s);
outtextxy(255, 580, ',');
_stprintf(s, _T("%d"), Y2);
outtextxy(260, 580, s);
outtextxy(285, 580, ')');

}

double zuijin()

{
char c = ‘o’;
int i, j, t;
int d2 = 1460000;
srand((unsigned)time(NULL));
int n = 20;//产生点的个数

for (i = 0; i < n; i++) {
	zuobiao[i].x = rand() % 1100 + 1;
	zuobiao[i].y = rand() % 500 + 1;
	setfillcolor(BLACK);
	setlinecolor(BLACK);
	for(int i = 0;i<n;i++)
		fillcircle(zuobiao[i].x, zuobiao[i].y, 2);
}

for (i = 0; i < n-1 ; i++)
	for (j = i + 1; j < n; j++) {
		t = (zuobiao[i].x - zuobiao[j].x) * (zuobiao[i].x - zuobiao[j].x) + (zuobiao[i].y - zuobiao[j].y) * (zuobiao[i].y - zuobiao[j].y);
		setlinecolor(BLUE);
		line(zuobiao[i].x, zuobiao[i].y, zuobiao[j].x, zuobiao[j].y);
		Sleep(50);
		if (t < d2) {
			d2 = t;
			setlinecolor(RED);
			line(zuobiao[i].x, zuobiao[i].y, zuobiao[j].x, zuobiao[j].y);
			Sleep(50);
			setlinecolor(WHITE);
			line(X1,Y1,X2,Y2);
			setlinecolor(BLACK);
			setfillcolor(BLACK);
			for (int i = 0; i < n; i++)
				fillcircle(zuobiao[i].x, zuobiao[i].y, 2);
			X1 = zuobiao[i].x;
			X2 = zuobiao[j].x;
			Y1 = zuobiao[i].y;
			Y2 = zuobiao[j].y;
		}
		else {
			setlinecolor(WHITE);
			line(zuobiao[i].x, zuobiao[i].y, zuobiao[j].x, zuobiao[j].y);
			setlinecolor(BLACK);
			setfillcolor(BLACK);
			for (int i = 0; i < n; i++)
				fillcircle(zuobiao[i].x, zuobiao[i].y, 2);
			setlinecolor(RED);
			line(X1, Y1, X2, Y2);
		}
	}

return sqrt(d2);

}

int main() {
initgraph(1200,600);
setbkcolor(WHITE);
cleardevice();
double distance = zuijin();
display(distance);
while (1);
return 0;
}

视频链接:https://www.bilibili.com/video/BV1Xq4y1j7nB

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

底层开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值