王道数据结构课后代码题p19 第14题请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c) 中的最小距离。(c语言代码实现)

 本题其实就是找a到c的最小值

有讲解p19 第14题 c语言实现王道数据结构课后代码题_哔哩哔哩_bilibili

下方有图:

王道数据结构课后代码题p19 第14题请设计一个尽可能高效的算法,计算并输出所有可能的三元组(a,b,c) 中的最小距离。(c语言代码实现)_第1张图片

本题代码如下

int abs(int a)//计算绝对值
{
	if (a < 0)
		return -a;
	else
		return a;
}
int min(int a, int b, int c)//a是否为三个数中的最小值
{
	if (a <= b && a <= c)
		return 1;
	else
		return 0;
}
int findmin(int a[], int m, int b[], int n, int c[], int p)
{
	int i = 0;
	int j = 0;
	int k = 0;
	int d_min = max;//用来记录三元组中的最小距离,初值赋为max
	int d = 0;
	while (i < n && j < m && k < p && d_min>0)
	{
		d = abs(a[i]-b[j])+abs(b[j]-c[k])+abs(c[k]-a[i]);
		if (d < d_min)
		{
			d_min = d;
		}

		if (min(a[i], b[j], c[k]))//更新a
			i++;
		else if (min(b[j], c[k], a[i]))//更新b
			j++;
		else//更新c
			k++;
	}
	return d_min;
}

完整测试代码

#include
#define max 0x7fffffff
int a[3] = { -1,0,9 };
int m = 3;
int b[4] = { -25,-10,10,11 };
int n = 4;
int c[5] = { 2,9,17,30,41 };
int p = 5;
int abs(int a)//计算绝对值
{
	if (a < 0)
		return -a;
	else
		return a;
}
int min(int a, int b, int c)//a是否为三个数中的最小值
{
	if (a <= b && a <= c)
		return 1;
	else
		return 0;
}
int findmin(int a[], int m, int b[], int n, int c[], int p)
{
	int i = 0;
	int j = 0;
	int k = 0;
	int d_min = max;//用来记录三元组中的最小距离,初值赋为max
	int d = 0;
	while (i < n && j < m && k < p && d_min>0)
	{
		d = abs(a[i]-b[j])+abs(b[j]-c[k])+abs(c[k]-a[i]);
		if (d < d_min)
		{
			d_min = d;
		}

		if (min(a[i], b[j], c[k]))//更新a
			i++;
		else if (min(b[j], c[k], a[i]))//更新b
			j++;
		else//更新c
			k++;
	}
	return d_min;
}
int main()
{
	int ret = findmin(a, m, b, n, c, p);
	printf("%d", ret);
}

你可能感兴趣的:(顺序表,算法,数据结构,c语言)