主题:加分帖~
			 zhaoren
				 [专家分:420]  发布于 2005-10-07 12:39:00
 zhaoren
				 [专家分:420]  发布于 2005-10-07 12:39:00							
			8皇后问题:
在8*8的国际象棋盘上,摆8个皇后,要使它们互相吃不到~[em18][em18]
各位大虾帮个忙,我是新手~~
						
					 
		
			
回复列表 (共9个回复)
		
								
				沙发
				
					 fxzxg [专家分:430]  发布于 2005-10-07 13:49:00
fxzxg [专家分:430]  发布于 2005-10-07 13:49:00				
				program tt;
var a:array [1..8] of integer;
    b,c,d:array [-7..16] of integer;
    t,i,j,k:integer;
procedure print;
begin
      t:=t+1;
      write(t,'       ');
      for k:=1 to 8 do write(a[k],'   ');
      writeln;
end;
procedure try(i:integer);
var j:integer;
begin
     for j:=1 to 8 do
          if (b[j]=0) and (c[i+j]=0) and (d[i-j]=0) then
          begin
                a[i]:=j;
                b[j]:=1;
                c[i+j]:=1;
                d[i-j]:=1;
                if i<8 then try(i+1)
                        else print;
               b[j]:=0;
               c[i+j]:=0;
               d[i-j]:=0;
          end;
end;
begin
     for k:=-7 to 16 do
     begin
          b[k]:=0;
          c[k]:=0;
          d[k]:=0;
     end;
     try(1);
end.
							 
						
				板凳
				
					 zhsas [专家分:1680]  发布于 2005-10-07 16:09:00
zhsas [专家分:1680]  发布于 2005-10-07 16:09:00				
				这个我回过两次了.你可以用搜索功能找的.
							 
						
				3 楼
				
					 zhaoren [专家分:420]  发布于 2005-11-12 17:52:00
zhaoren [专家分:420]  发布于 2005-11-12 17:52:00				
				谢谢了
							 
						
				4 楼
				
					 lmj9201 [专家分:1400]  发布于 2005-11-13 20:24:00
lmj9201 [专家分:1400]  发布于 2005-11-13 20:24:00				
				program eightqueens;
 var
  x:array[1..8] of integer;
  a,b,c:array[-7..16] of boolean;
  i:integer;
 procedure print;
  var k:integer;
  begin
   for k:=1 to 8 do write(x[k]:4);
   writeln;
  end;
 procedure try(i:integer);
  var j:integer;
  begin
   for j:=1 to 8 do
    if a[j] and b[i+j] and c[i-j]
     then begin
   x[i]:=j;
   a[j]:=false;
   b[i+j]:=false;
   c[i-j]:=false;
   if i<8 then try(i+1)
    else print;
   a[j]:=true;
   b[i+j]:=true;
   c[i-j]:=true
  end
 end;
 begin
  for i:=-7 to 16 do
   begin
    a[i]:=true;
    b[i]:=true;
    c[i]:=true
   end;
  try(1);
 end. 
这个更简单。
							 
						
				5 楼
				
					 无敌傻仔 [专家分:210]  发布于 2005-11-14 16:41:00
无敌傻仔 [专家分:210]  发布于 2005-11-14 16:41:00				
				可以用搜索。
							 
						
				6 楼
				
					 小乖乖 [专家分:290]  发布于 2005-11-14 17:29:00
小乖乖 [专家分:290]  发布于 2005-11-14 17:29:00				
				搜索呀!!~~`
							 
						
				7 楼
				
					 济公二世 [专家分:200]  发布于 2006-08-14 15:06:00
济公二世 [专家分:200]  发布于 2006-08-14 15:06:00				
				我用搜索搜过. 你也试下
							 
						
				8 楼
				
					 南飞的大雁 [专家分:50]  发布于 2007-10-29 16:12:00
南飞的大雁 [专家分:50]  发布于 2007-10-29 16:12:00				
				用穷举搜索即可.不过效率较低.也可以用回溯搜索,只不过编起来较慢.自己选择用哪一种.
[fly]加点分![/fly]
							 
						
				9 楼
				
					 morethan [专家分:10]  发布于 2007-10-29 16:35:00
morethan [专家分:10]  发布于 2007-10-29 16:35:00				
				八皇后问题很经典,有不少现成的代码可用,你可以借鉴呀,当然自己能琢磨出来那就更好了。
							 
									
			
我来回复