【問題描述】
小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。
小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。
這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上、下、左、右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。
請告訴小明,k 個月後空地上哪些地方有草。
【輸入格式】
輸入的第一行包含兩個整數 n, m。
接下來 n 行,每行包含 m 個字母,表示初始的空地狀態,字母之間沒有空格。如果為小數點,表示為空地,如果字母為 g,表示種了草。
接下來包含乙個整數 k。
【輸出格式】
輸出 n 行,每行包含 m 個字母,表示 k 個月後空地的狀態。如果為小數點,表示為空地,如果字母為 g,表示長了草。
【樣例輸入】
4 5
.g...
....
...g....
...
2
【樣例輸出】
gggg.
gggg.
ggggg
.ggg.
【評測用例規模與約定】
對於 30% 的評測用例,2 <= n, m <= 20。
對於 70% 的評測用例,2 <= n, m <= 100。
對於所有評測用例,2 <= n, m <= 1000,1 <= k <= 1000。
1.先掃瞄初始陣列中『g』的個數和其位置,並記錄下來。
2.第一步記錄的所有座標往四周擴散。
3.重複第一步,直到k次後或者地圖全部長滿草時,退出迴圈。
4.列印草地。
#include #include using namespace std;
char s[1000][1000];
char temp[1000][1000];
int m, n, kp;
int smr(); /*掃瞄s陣列中的所有『g』並複製到temp陣列的同一位置上*/
void pri(); /*列印陣列s*/
void soi(); /*掃瞄temp**現『g』的位置,並且把s的同一位置的四周替換為『g』*/
int main()
} cin >> kp;
for (int i = 1; i <= kp; ++i)
soi();
fill(temp[0], temp[0] + 1000000, 0); /*把陣列temp的所有成員賦值為0*/
} pri();
return 0;
}int smr()
else
}} return sum;
}void pri()
cout << endl; }}
void soi()
if (j < 999)
if (k > 0)
if (k < 999)
}} }
}
樣例通過
BFS演算法 藍橋杯長草問題
小明有一塊空地,他將這塊空地劃分為 nn 行 mm 列的小塊,每行和每列的長度都為 1。小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上 下 左 右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。請告訴...
藍橋杯校內模擬賽 2長草
問題描述 小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上 下 左 右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。...
2023年藍橋杯模擬賽 長草
小明有一塊空地,他將這塊空地劃分為 n 行 m 列的小塊,每行和每列的長度都為 1。小明選了其中的一些小塊空地,種上了草,其他小塊仍然保持是空地。這些草長得很快,每個月,草都會向外長出一些,如果乙個小塊種了草,則它將向自己的上 下 左 右四小塊空地擴充套件,這四小塊空地都將變為有草的小塊。請告訴小明...