Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCGRASS/
Nội dung bài viết
1. Đề bài BCGRASS spoj PTIT
Bessie dự định cả ngày sẽ nhai cỏ xuân và ngắm nhìn cảnh xuân trên cánh đồng của nông dân John,
cánh đồng này được chia thành các ô vuông nhỏ với R (1 <= R <= 100) hàng và C (1 <= C <= 100) cột.
Bessie ước gì có thể đếm được số khóm cỏ trên cánh đồng.
Mỗi khóm cỏ trên bản đồ được đánh dấu bằng một ký tự ‘#‘ hoặc là 2 ký tự ‘#’ nằm kề nhau (trên đường chéo thì không phải).
Cho bản đồ của cánh đồng, hãy nói cho Bessie biết có bao nhiêu khóm cỏ trên cánh đồng.
Ví dụ như cánh đồng dưới dây với R=5 và C=6:
.#….
..#…
..#..#
…##.
.#….
Cánh đồng này có 5 khóm cỏ: một khóm ở hàng đầu tiên, một khóm tạo bởi hàng thứ 2 và thứ 3 ở cột thứ 2,
một khóm là 1 ký tự nằm riêng rẽ ở hàng 3, một khóm tạo bởi cột thứ 4 và thứ 5 ở hàng 4, và một khóm cuối cùng ở hàng 5.
Dữ liệu
- Dòng 1: 2 số nguyên cách nhau bởi dấu cách: R và C
- Dòng 2..R+1: Dòng i+1 mô tả hàng i của cánh đồng với C ký tự, các ký tự là ‘#’ hoặc ‘.’ .
Kết quả
- Dòng 1: Một số nguyên cho biết số lượng khóm cỏ trên cánh đồng.
Ví dụ
Dữ liệu
5 6
.#….
..#…
..#..#
…##.
.#….
Kết quả
5
2. Hướng dẫn BCGRASS spoj PTIT
– Sử dụng thuật toán đếm số thành phần liên thông.
3. code tham khảo BCGRASS spoj PTIT
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | const fi=''; nmax=100; cld:array[1..4] of shortint=(1,-1,0,0); clc:array[1..4] of shortint=(0,0,1,-1); type data=longint; var f:text; A:array[0..nmax+1,0..nmax+1] of char; n,m:data; procedure docfile; var i,j:data; begin assign(f,fi); reset(f); readln(f,m,n); for i:=1 to m do begin a[i,0]:='.'; a[i,n+1]:='.'; end; for j:=1 to n do begin a[0,j]:='.'; a[m+1,j]:='.'; end; for i:=1 to m do begin for j:=1 to n do read(f,a[i,j]); readln(f); end; close(f); end; procedure dfs(u,v:data); var i:data; x,y:data; begin a[u,v]:='.'; for i:=1 to 4 do begin x:=cld[i]+u; y:=clc[i]+v; if a[x,y]='#' then dfs(x,y); end; end; procedure xuli; var i,j:data; res:data; begin res:=0; for i:=1 to m do for j:=1 to n do if a[i,j]='#' then begin inc(res); dfs(i,j); end; writeln(res); end; begin docfile; xuli; end. |
Bài viết liên quan
- BCACM11E spoj PTIT – Phương án bắn pháo
- BCISLAND PTIT spoj – Nước biển
- C11BC2 spoj – Robin
- PTIT016E spoj PTIT – ACM PTIT 2016 E – Kỳ thi ACM/ICPC
- VDANGER SPOJ- Nguy hiểm rõ ràng trước mắt
- P156SUME spoj PTIT – ROUND 6E – Ước chung của chuỗi
- P156SUMH spoj PTIT – ROUND 6H – Kim cương
- BCLKCOUN spoj PTIT – Đếm số ao
- BCBIN spoj PTIT – Các thùng nước
- BCACM11D spoj PTIT – Đường nguyên tố