siro391992
09-02-2008, 21:53
Moi người coi hộ em bài này
Xét một ô đất hcn m*n .Mỗi ô đất có thể có hoặc chưa có ngôi nhà nào.Người ta mô tả
miếng này băng bảng hcn mỗi ô chứa môt số là tổng số nhà xây xung quanh nó (các ô có chung đỉnh hoặc cạnh ).Hãy nêu rõ bản đồ về tình trạng các ngôi nhà ỏ khu đó.
input
1 1 1 2 0 1 0 0
1 3 3 3 1 1 0 0
0 2 1 3 2 2 2 1
0 3 3 5 2 2 3 1
1 4 4 5 4 3 3 3
0 4 5 6 5 3 3 1
1 4 5 7 5 3 3 2
0 2 3 5 4 4 1 1
output
0 1 1 0 1 0 0 0
0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 1 1 0 1
0 0 1 1 0 0 1 0
1 0 1 1 0 0 0 1
0 0 1 1 1 1 0 0
0 0 1 1 1 0 1 0
Nhờ mọi người xem hộ
Mình chưa hiểu yêu cầu của bài lắm Vì Input như thế mà Ouput lại không thấy logic cho lắm.
Xin lỗi nhưng hoàn toàn không hiểu gì cả. :D :D
Input như thế nào mà cần xuất ra Output ra sao .
siro391992
10-02-2008, 20:49
Xin lỗi nhưng hoàn toàn không hiểu gì cả. :D :D
Input như thế nào mà cần xuất ra Output ra sao .
Xin lỗi
Nhưng đúng rồi đó
Có nghĩa là bạn cũng hổng biết đề muốn nói gì chứ gì. :D :D
siro391992
10-02-2008, 20:56
Có nghĩa là bạn cũng hổng biết đề muốn nói gì chứ gì. :D :D
code nè
const fi='khoiphuc.inp';
fo='khoiphuc.out';
var f:text;
m,n:longint;
a,x:array[-1..105,-1..105]of integer;
ok,doi:boolean;
procedure doc;
var i,j,tg:integer;
begin
assign(f,fi);
reset(f);
readln(f,m,n);
doi:=false;
if m<=n then
for i:=1 to m do
begin
for j:=1 to n do read(f,a[i,j]);
readln(f);
end
else begin
for i:=1 to m do
begin
for j:=1 to n do read(f,a[j,m+1-i]);
readln(f);
end;
doi:=true;
tg:=m;
m:=n;
n:=tg;
end;
close(f);
end;
procedure inkq;
var i,j:integer;
begin
assign(f,fo);rewrite(f);
if ok=true then begin
writeln(f,'YES');
if doi=false then
for i:=1 to m do
begin
for j:=1 to n do
write(f,x[i,j],#32);
writeln(f);
end
else
for i:=n downto 1 do
begin
for j:=1 to m do write(f,x[j,i],#32);
writeln(f);
end;
end
else writeln(f,'NO');
close(f);
end;
function thoaman(k:integer):boolean;
var i,u,v:integer;
begin
thoaman:=false;ok:=false;
if (k=n+1) and(x[1,k]<>0)then exit;
if (k=m+1) and(x[k,1]<>0)then exit;
for i:=2 to k do
begin
u:=i;v:=k-1;
while (u<=k)and(v>=2) do
begin
x[u,v]:=a[u-1,v-1]-(x[u,v-1]+x[u,v-2]+x[u-1,v-2]
+x[u-2,v-2]+x[u-2,v-1]+x[u-2,v]
+x[u-1,v]);
if (u<=m) and((x[u,v]<0)or(x[u,v]>1))then exit;
if (v=n+1)and(x[u,v]<>0)then exit;
if (u=m+1)and(x[u,v]<>0)then exit;
inc(u);dec(v);
end;
end;
thoaman:=true;ok:=true;
end;
procedure try(k:integer);
var i,j:integer;
begin
if k>n+1 then
begin
inkq;
halt;
end;
for i:=0 to 1 do
for j:=0 to 1 do
begin
x[1,k]:=i;
x[k,1]:=j;
if thoaman(k)then
begin try(k+1);
if ok then exit;
end;
end;
end;
procedure tinh;
var i:integer;
begin
for i:=0 to 1 do
begin
x[1,1]:=i;
try(2);
end;
end;
procedure kt;
var i,j:integer;
begin
for i:=1 to m do
begin
x[i,-1]:=0;
x[i,0]:=0;
end;
for j:=1 to n do
begin
x[-1,j]:=0;
x[0,j]:=0;
end;
end;
BEGIN
DOC;
KT;
TINH;
INKQ;
END.
(0 chi chua có ngôi nhà xây dựng
1 chỉ đã có ngôi nhà xây dựng
ở test in put mỗi ô chỉ số nhà xây xung quanh)
mr_invincible
10-02-2008, 21:56
Không hiểu bạn hỏi mọi người xem hộ là thế nào nhỉ? Hỏi xong lại viết code ra?
:dontgetit :dontgetit
đề bài này cũng dễ hiểu mà,giống như trò Minesweeper trong máy tính đó
tranvanho
11-02-2008, 09:35
ui trời
mình ổng hiểu đề rùi mình ổng làm
vui ghê
TIG_Messi
12-02-2008, 18:32
Đây là bài duyệt quay lui thôi :p
Dạng này quen rồi, đúng như phuclun nói đó :)
nncb2008
18-02-2008, 22:39
Mình đọc code của Siro391992 nhưng chẳng hiểu mấy. Bạn có thể mô tả lại cho mình hiểu thêm được không?
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.