/*
洛谷 - 奇怪的電梯
本題有很多方法,但是我還是用了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...