Nguồn đề bài: http://www.spoj.com/PTIT/problems/BCBOM/
1. Đề bài BCBOM spoj PTIT
Trong trò chơi dò mìn, người ta cho trước một ma trận cấp n*m trong đó có một số quả mìn ở các vị trí nào đó. Nhiệm vụ của người chơi là xác định vị trí của các quả mìn này dựa trên các ô xung quanh.
Trong bài này, bạn hãy viết chương trình chuyển từ ma trận n*m mô tả vị trí các quả mìn và các ô trống thành một ma trận khác trong đó với mỗi ô trống sẽ xác định xem có bao nhiêu quả mìn kề với nó.
Input: Có nhiều bộ test, mỗi bộ test bắt đầu bằng 2 số nguyên n và m (1<=n,m<=100). Tiếp theo đó là ma trận cấp n*m trong đó vị trí có mìn đánh dấu bởi ký tự * còn không có là dấu chấm (.). Dòng cuối cùng của file Input chứa hai giá trị 0.
Output: Với mỗi bộ test, in ra màn hình ma trận tương ứng trong đó các vị trí có dấu chấm được thay bằng một số nguyên cho biết số quả mìn kề với ô đó.
Example
Input:
3 2
..
.*
..
5 5
*.*.*
..*..
*****
…..
..**.
0 0
Output:
11
1*
11
*3*3*
36*63
*****
24553
01**1
2. Gợi ý BCBOM spoj PTIT
Bài này không có gì khó, chỉ việc đếm các ô xung quanh, chủ yếu bạn phải cẩn thận các bước khởi tạo cũng như cách duyệt sao cho hợp lí thôi.
3. code tham khảo BCBOM spoj PTIT
const fi=''; nmax=100; type data=longint; var f:text; A,B:array[0..nmax+1,0..nmax+1] of char; n,m:data; function dem(u,v:data):data; var i,j:data; begin dem:=0; for i:=u-1 to u+1 do for j:=v-1 to v+ 1 do if a[i,j]='*' then inc(dem); end; procedure xuli; var i,j:data; begin for i:=1 to m do for j:=1 to n do if a[i,j]='.' then b[i,j]:=chr(dem(i,j)+48) else b[i,j]:='*'; for i:=1 to m do begin for j:=1 to n do write(b[i,j]); writeln; end; end; procedure docfile; var i,j:data; begin assign(f,fi); reset(f); repeat readln(f,m,n); if (m=0) and (n=0) then break; fillchar(a,sizeof(a),'.'); for i:=1 to m do begin for j:=1 to n do read(f,a[i,j]); readln(f); end; xuli; until false; close(f); end; begin docfile; end.