Pascal语言程序设计
要在6×6=36个方格中放入24个相同的小球,每格中放一个,并且每行或每列都有4个球(不考虑对角线)设计一个程序,并能输出结果(用1表示有球,应0表示无球)。显示出所有方...
要在6×6=36个方格中放入24个相同的小球,每格中放一个,并且每行或每列都有4个球(不考虑对角线)设计一个程序,并能输出结果(用1表示有球,应0表示无球)。显示出所有方案及数量。
展开
4个回答
展开全部
要显示所有的方案的话就不用想别的了,就是要你搜索,没什么好算法.
怎么搜都一样了,dfs可能好写一点.
或许也有构造法吧?...让我想想
.-----
想不到了,搜吧.答案有6万多个,我把print注释掉了.
var ans:longint;
state:array[1..6,1..6]of byte;
num:array[1..6]of byte;
function suc():boolean;
var i:integer;
begin
for i:=1 to 6 do
if(num[i]>4)then
exit(false);
exit(true);
end;
procedure print();
var i,j:integer;
begin
for i:=1 to 6 do begin
for j:=1 to 6 do
write(state[i,j]);
writeln;
end;
end;
procedure fill(dep:integer);
var i:integer;
begin
for i:=1 to 6 do
state[dep,i]:=1;
end;
procedure search(dep:integer);
var i,j:longint;
begin
if(dep>6)then begin
if(suc())then begin
//print();
inc(ans);
end;
exit;
end;
fill(dep);
for i:=1 to 5 do begin
for j:=i+1 to 6 do begin
state[dep,i]:=0;
state[dep,j]:=0;
dec(num[i]);
dec(num[j]);
search(dep+1);
inc(num[i]);
inc(num[j]);
state[dep,i]:=1;
state[dep,j]:=1;
end;
end;
end;
begin
fillchar(num,sizeof(num),6);
ans:=0;
search(1);
writeln(ans);
end.
怎么搜都一样了,dfs可能好写一点.
或许也有构造法吧?...让我想想
.-----
想不到了,搜吧.答案有6万多个,我把print注释掉了.
var ans:longint;
state:array[1..6,1..6]of byte;
num:array[1..6]of byte;
function suc():boolean;
var i:integer;
begin
for i:=1 to 6 do
if(num[i]>4)then
exit(false);
exit(true);
end;
procedure print();
var i,j:integer;
begin
for i:=1 to 6 do begin
for j:=1 to 6 do
write(state[i,j]);
writeln;
end;
end;
procedure fill(dep:integer);
var i:integer;
begin
for i:=1 to 6 do
state[dep,i]:=1;
end;
procedure search(dep:integer);
var i,j:longint;
begin
if(dep>6)then begin
if(suc())then begin
//print();
inc(ans);
end;
exit;
end;
fill(dep);
for i:=1 to 5 do begin
for j:=i+1 to 6 do begin
state[dep,i]:=0;
state[dep,j]:=0;
dec(num[i]);
dec(num[j]);
search(dep+1);
inc(num[i]);
inc(num[j]);
state[dep,i]:=1;
state[dep,j]:=1;
end;
end;
end;
begin
fillchar(num,sizeof(num),6);
ans:=0;
search(1);
writeln(ans);
end.
2012-07-18
展开全部
。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
语句结束要有分号,即使在同一行内
比如第一行应该是这样:a:=32/2;b=32/2;c:=32/2;d:=32/2;e:=32+a+b+c+d
你这个程序到底是什么意思啊
比如第一行应该是这样:a:=32/2;b=32/2;c:=32/2;d:=32/2;e:=32+a+b+c+d
你这个程序到底是什么意思啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询