給定乙個 n 行 m 列的地牢,其中 『.』 表示可以通行的位置,』x』 表示不可通行的障礙,牛牛從 (x0 , y0 ) 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位置上。牛牛想知道最壞情況下,他需要多少步才可以離開這個地牢。
輸入描述:
每個輸入包含 1 個測試用例。每個測試用例的第一行包含兩個整數 n 和 m(1 <= n, m <= 50),表示地牢的長和寬。接下來的 n 行,每行 m 個字元,描述地牢,地牢將至少包含兩個 『.』。接下來的一行,包含兩個整數 x0, y0,表示牛牛的出發位置(0 <= x0 < n, 0 <= y0 < m,左上角的座標為 (0, 0),出發位置一定是 『.』)。之後的一行包含乙個整數 k(0 < k <= 50)表示牛牛合法的步長數,接下來的 k 行,每行兩個整數 dx, dy 表示每次可選擇移動的行和列步長(-50 <= dx, dy <= 50)
輸出描述:
輸出一行乙個數字表示最壞情況下需要多少次移動可以離開地牢,如果永遠無法離開,輸出 -1。以下測試用例中,牛牛可以上下左右移動,在所有可通行的位置.上,地牢出口如果被設定在右下角,牛牛想離開需要移動的次數最多,為3次。
輸入例子:
3 3
… …
… 0 1
4 1 0
0 1
-1 0
0 -1
輸出例子:
錯誤做法如下,利用動態規劃,每個位置儲存到達此位置的最短步數,這個思路的問題是,由於二維移動所以在第一遍遍歷所有點的時候會跳過一些點,這些點之後還有可能到達。這樣就會漏掉一些點。
#include
#include
#include
#include
using
namespace
std;
int main()
}int start_cols, start_rows;
cin >> start_rows >> start_cols;
int step_num;
cin >> step_num;
vector
> step_vec(step_num, vector
(2, 0));
for (int i = 0; i != step_num; ++i)
vector
> dung_max_step(dungeon_rows, vector
(dungeon_cols, -1));
dung_max_step[start_rows][start_cols] = 0;
for (int i = start_rows; i != dungeon_rows; ++i)}}
}}
}for (int i = 0; i != start_rows; ++i)}}
}}
}int max_step = -1;
for (int i = 0; i != dungeon_rows; ++i)
if (max_stepcout
<< max_step << endl;
return
0;}
可以利用廣度優先搜素的方法進行計算
#include
#include
#include
#include
#include
#include
using
namespace
std;
struct point;
point go(int m,int n)
};int main()
}int start_cols, start_rows;
cin >> start_rows >> start_cols;
int step_num;
cin >> step_num;
vector
> step_vec(step_num, vector
(2, 0));
for (int i = 0; i != step_num; ++i)
vector
> dung_max_step(dungeon_rows, vector
(dungeon_cols, int_max));
dung_max_step[start_rows][start_cols] = 0;
queue
que;
que.push(point(start_rows,start_cols));
while(!que.empty())}}
}int max_step=-1;
for (int i = 0; i != dungeon_rows; ++i)
if (dung_vec[i][j]=='.'&&max_stepcout
<< max_step << endl;
return
0;}
2017網易校招真題 地牢逃脫
地牢逃脫 時間限制 1秒 空間限制 32768k 熱度指數 8622 給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能...
地牢逃脫 BFS
題意 給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位置上。牛牛想知道...
68 地牢逃脫
個人水平有限,請見諒!給定乙個 n 行 m 列的地牢,其中 表示可以通行的位置,x 表示不可通行的障礙,牛牛從 x0 y0 位置出發,遍歷這個地牢,和一般的遊戲所不同的是,他每一步只能按照一些指定的步長遍歷地牢,要求每一步都不可以超過地牢的邊界,也不能到達障礙上。地牢的出口可能在任意某個可以通行的位...