奇怪的程序行为

时间:2014-12-29 23:10:54

标签: c++

所以我想编写解决这个问题的代码:" Collecting Beepers" 我做了:

int rec(int current, int beers)
{
    if(beers == (1 << (numOfBeers + 1)) - 1) return cost(beerX[0], beerY[0], beerX[current], beerY[current]);
    int optimal = 100000;
    for(int i = 1; i <= numOfBeers; ++i)
    {
        if(((1 << i) & beers) == 0)
        {
            int newBeersSet = (1 << i) | beers;
            int c = cost(beerX[current], beerY[current], beerX[i], beerY[i]);
            int current = c + rec(i, newBeersSet);
            optimal = min(optimal, current);
        }
    }
    return optimal;
}

奇怪的是,当我更换零件时

int c = cost(beerX[current], beerY[current], beerX[i], beerY[i]);
int current = c + rec(i, newBeersSet);

int current = cost(beerX[current], beerY[current], beerX[i], beerY[i]) + rec(i, newBeersSet);

逻辑是完全相同的,但是我的程序在相同的问题(问题解释中给出的)输入崩溃,并且在线判断由于程序执行而给出了错误的答案,而原始代码则给出了Accepted。有什么想法可能是错的吗?

2 个答案:

答案 0 :(得分:2)

这可能是因为你的变量“current”被覆盖了。旅行>

int current2 = cost(beerX[current], beerY[current], beerX[i], beerY[i]) + rec(i, newBeersSet);
optimal = min(optimal, current2);

答案 1 :(得分:2)

在这一行中,您使用的是未初始化的变量:

int current = cost(beerX[current],  // ...

这声明了一个新变量current,然后,在变量赋值之前,将其用作beerX的索引。

你可能意味着:

int new_current = cost(beerX[current],  // ...

使用在current函数的参数列表中声明的现有rec变量。