題目:
地上有個m行n列的方格。乙個機械人從座標(0,0)的格仔開始移動,它每一次可以向左、右、上、下移動一格,但不能進入行座標和列座標的數字之和大於k的格仔。
例如,當k為18時,機械人能夠進入方格(35,37),因為3+5+3+7=18.但它不能進入方格(35,38),因為3+5+3+8=19.請問該機械人能夠達到多少格仔?
和上一題66 - 矩陣中的路徑類似,只是約束條件發生了改變。
當機械人在某乙個格仔時,它能夠向上下左右四個方向運動,當訪問周圍的格仔時,標記為已訪問,判斷該格仔座標是否滿足要求,滿足則計數加 1,否則計數加 0. 當遍歷完所有格仔時,計數完畢。
bool checknum(int row, int col, int threshold); // 檢查座標是否滿足要求
int movecountscore(int rows, int cols, int row, int col, bool* visited, int threshold);
int movecounts(int threshold, int rows, int cols)
bool* visited = new
bool [rows*cols]; //訪問記錄
for (int i = 0; i < rows*cols; i++)
visited[i] = false;
int counts = movecountscore(rows, cols, 0, 0, visited, threshold);
delete visited;
return counts;
}int movecountscore(int rows, int cols, int row, int col, bool* visited, int threshold)
return0;}
// 檢查座標是否,滿足要求
bool checknum(int row, int col, int threshold)
while (col != 0)
if (bit_sum <= threshold)
return
true;
else
return
false;
}
// ******************************== test code ******************************==
void test(char* testname, int threshold, int rows, int cols, int expected)
void test1()
void test2()
void test3()
void test4()
void test5()
void test6()
void test7()
void test8()
int main(int agrc, char* argv)
67 機械人的運動範圍
面試題67 機械人的運動範圍 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38...
機械人的移動範圍
時間限制 1秒 空間限制 32768k 熱度指數 28122 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。...
機械人運動範圍
題目 地上有乙個m行和n列的方格。乙個機械人從座標0,0的格仔開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數字之和大於k的格仔。例如,當k為18時,機械人能夠進入方格 35,37 因為3 5 3 7 18。但是,它不能進入方格 35,38 因為3 5 3 8 1...