一、贪心算法
贪心算法暗示一种不追求最优解,只希望找到较为满意解的方法。贪心算法省去了为找最优解要穷尽所有可能而必须耗费大量时间,因此它一般可以快速得到较为满意的答案。贪心算法常常以当前情况为基础做最优选择,而不考虑各种的整体情况,所以贪心算法不需要回溯。
二、加油站问题
1、问题
一辆汽车加满油后可以行驶n千米,旅途中有若干个加油站(加油站是已经确定好的),为了使沿途加油次数最少,设计一个算法,输出最好的加油方案。
例如:假设沿途有9个加油站,总路程为100千米,加满油后汽车行驶的最远距离为20千米。
2、C语言解决
#include <stdio.h>
#define S 100 //S是全程长度
void main()
{
int i, j, n, k=0, total, dist;
int x[]= {
10, 20, 35, 40, 50, 65, 75, 85, 100}; //加油站距离起点的位置
int a[10]; //选择加油点的位置
n= sizeof(x)/sizeof(x[0]); //沿途加油站的个数
printf("请输入最远行车距离(15<=n<100):");
scanf("%d",&dist);
total= dist; //总行驶的里程
j= 1; //选择的加油站个数
while(total<S) //如果汽车未走完全程
{
for(i=k; i<n; i++)
{
if(x[i]>total) //如果距离下一个加油站太远
{
a[j]= x[i-1]; //则在当前加油站加油
j++;
total= x[i-1]+dist; //计算加完油能行驶的最远距离
k= i;
break;
}
}
}
for(i=1; i<j; i++) //输出加油点
printf("%4d",a[i]);
}
《The Function and Algorithm of Program Language C/C++》