BCISLAND - Nước biển

Link Sub: http://www.spoj.com/PTIT/problems/BCISLAND/
Người Gửi: Dương Lee

  • Problem:

Trái đất nóng lên kéo theo mực nước biển dâng. Hòn đảo nhỏ Gonnasinka thuê bạn để dự báo trước hiểm họa này. Cho trước 1 lưới tọa độ thể hiện cao độ của đảo, hãy giúp họ tính toán xem nước biển dâng cao bao nhiêu thì hòn đảo sẽ bị chia cắt.
Input
Input gồm nhiều bộ test, mỗi bộ test bao gồm:  
Dòng đầu ghi 2 số n, m là chiều dài và chiều rộng. 
Sau đó là n dòng, mỗi dòng gồm m số, mỗi số cho biết độ cao của ô đó, giá trị 0 chỉ mực nước biển. Những ô giá trị 0 dọc theo đường viền và những ô số 0 liền kề những ô này chỉ mặt biển. Những ô có giá trị 0 còn lại (được bao bọc bởi các số > 0) là đất liền bên trong đảo nhưng có độ cao ngang mặt nước biển. Hòn đảo lúc đầu chưa bị chia cắt. Số n và m không lớn hơn 100 và độ cao không lớn hơn 1000. 
Dòng cuối cùng của input chứa 2 số 0
Output
Với mỗi bộ test, in ra:  
Case n: Island splits when ocean raises f feet. (Đảo bị chia khi nước biển dâng cao f feet)  
Hoặc  
Case n: Island never splits. (Đảo không bao giờ bị chia cắt)
Example:
Input
5 5
3 4 3 0 0
3 5 5 4 3
2 5 4 4 3
1 3 0 0 0
1 2 1 0 0
5 5
5 5 5 5 7
4 1 1 1 4
4 1 2 1 3
7 1 0 0 4
7 3 4 4 4
0 0
Output:
Case 1: Island never splits.
Case 2: Island splits when ocean rises 3 feet.

  • Solution:

- Bài này chia ra làm các bước như sau: + B1: Tìm độ cao lớn nhất so với mặt nước biển. (Hmax) + B2: Với độ cao tăng thêm: extra = 1->Hmax ta sẽ loang bắt đầu từ các cạnh là biển loang vào những nới có độ (độ cao <= extra). VD: có bản đồ: 5 5 5 5 7 4 1 1 1 4 4 1 2 1 3 7 1 0 0 4 7 3 4 4 4 với extra=1 ta thu được check[][]: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +B3: Đếm số thành phần liên thông tại check[][] với các check[][]==0 bằng DFS; Số thành phần liên thông > 1 thì tại độ cao extra đó đảo bị chia cắt; VD: ở bản đồ trên tại extra = 3 ta có check[][]: 0 0 0 0 0 0 1 1 1 0 0 1 0 1 1 0 1 1 1 0 0 1 0 0 0

  • Code:

C++:



JAVA:


Share this

Related Posts

Previous
Next Post »

1 nhận xét:

nhận xét
lúc 21:31 3 tháng 5, 2018 delete

Bạn ơi cho mình hỏi ở bài này ở hàm loang(int i,int j). Nếu mình bỏ điều kiện check[i][j]==0 thì code k chạy nhỉ. Mình nghĩ k cần cái ddkien này vì nếu cái check[i][j] mà bằng 1 thì lúc sau cho bằng 1 tiếp có sao đâu nhỉ @@

Reply
avatar