洛谷P1135 奇怪的電梯 BFS寬度優先搜尋

2022-05-19 02:18:59 字數 1268 閱讀 4535

/*

洛谷 - 奇怪的電梯

本題有很多方法,但是我還是用了bfs(畢竟簡單)。。。

但是寫起來發現有很多細節需要注意的。。。

1. 第乙個錯誤在樓層的計數:

每乙個節點向上向下走都是有各自不同的步數的,

本題中每乙個節點可能會有兩個子節點,也可能並沒有,

所以不能用乙個全域性變數直接儲存步數。

2. 開始的初始判斷:

如果 a == b 直接輸出0

3. 判重:

本題是一維搜尋,不像二維不需要判重。

*/#include using namespace std;

int k[201];

int li[400001][2]; //li[0] is 樓數, and li[1] is 到本樓的步數

int book[201];

int head = 0; //li[head] is the first one...

int tail = 1; //tail pointed the next one...(li[tail-1] is the last one)

int n, a, b; //from a to b (top is n and floot is 1)

bool isfound = false;

int main()

li[head][0] = a;

li[head][1] = 0;

tail++;

while (head < tail) //until the list is empty

//cout << "step " << li[head][1] << " : " << li[head][0] << endl;

t = li[head][0] + k[li[head][0]];

if (t <= n && book[li[head][0]] == 0)

//if (t <= n)

t = li[head][0] - k[li[head][0]];

if (t > 0 && book[li[head][0]] == 0)

//if (t > 0)

book[li[head][0]] = 1;

head++;

//li[head][1] = li[head-1][1] + 1;

} cout << (isfound ? li[head][1] : -1) << endl;

return 0;

}

洛谷P1135 奇怪的電梯(BFS)

題目描述 呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第ii層樓 1 le i le n 1 i n 上有乙個數字k i 0 le k i le n ki 0 ki n 電梯只有四個按鈕 開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求...

洛谷P1135 奇怪的電梯(bfs)

呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第i層樓 1 i n 上有乙個數字ki 0 ki n 電梯只有四個按鈕 開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如 3,3,1,2,5代表了ki k1 3,k2...

洛谷p1135 奇怪的電梯

題目描述 呵呵,有一天我做了乙個夢,夢見了一種很奇怪的電梯。大樓的每一層樓都可以停電梯,而且第i層樓 1 i n 上有乙個數字ki 0 ki n 電梯只有四個按鈕 開,關,上,下。上下的層數等於當前樓層上的那個數字。當然,如果不能滿足要求,相應的按鈕就會失靈。例如 3 3 1 2 5代表了ki k1...