思路:就按题目所给的要求来,到一个站点,就减去消耗的油,如果没油了,返回false,否则,加上该站点加的油,重复直到开到入口点;注意到最后一个站点时,要把下一个站点设为0;
int init = 0;
int flag = true;
void dfs(vector<int> &gas, vector<int> &cost, int len, int now, int remain) //从enter口开始
{
//开到下一个点,消耗了油
remain -= cost[now];
//如果没油了,返回
if (remain < 0)
{
flag = false;
return;
}
int next = 0;
if (now != len - 1)
next = now + 1;
//如果开到了起始点,则说明满足条件
if (next == init)
{
flag = true;
return;
}
//加上下一个点加的油
remain += gas[next];
dfs(gas, cost, len, next, remain);
}
int canCompleteCircuit(vector<int> &gas, vector<int> &cost)
{
int len = gas.size();
for (int i = 0; i < len; i++)
{
if (gas[i] >= cost[i])
{
init = i;
dfs(gas, cost, len, i, gas[i]);
if (flag == true)
{
return init;
}
}
}
return -1;
}