C++ 贪心算法解决加油站问题
#include <iostream>
using namespace std;
int d=7;
int n=4;
int a[]={2,7,3,6};
int m=0;
void solve()
{
int i,sum;
for(int i=0;i<n;i++)
{
if(a[i]>d)
{
cout<'没有解'<endl;
return;
}
}
for(i=0,sum=0;i<n;i++)
{
sum+=a[i];
if(sum>d)
{
cout<'在'<i-1<'号加油站加油'<endl;
m++;
sum=a[i];
}
}
cout<'总加油次数:'<<m<<endl;
}
int main()
{
solve();
return 0;
}
算法描述内容:本算法是一个贪心算法,解决了在一条公路上有若干个加油站,每个加油站加满油后可以行驶一定的距离,求最少加几次油可以从起点到终点的问题。
- 首先判断是否有解,如果存在一个加油站的油量大于总路程,则无法到达终点,输出'没有解'并结束算法。
- 从起点开始,遍历每个加油站,并判断当前加油站的油量是否足够行驶到下一个加油站(即加上下一个加油站到当前加油站的距离),如果不够,则在当前加油站加油,输出当前加油站的编号,并将加油次数加一,同时将油量置为当前加油站的油量。
- 最后输出总加油次数。
算法复杂度为O(n),其中n为加油站的个数。
原文地址: https://www.cveoy.top/t/topic/nMKn 著作权归作者所有。请勿转载和采集!