n皇后递归算法
答案:2 悬赏:70 手机版
解决时间 2022-01-01 02:44
- 提问者网友:贪了杯
- 2021-12-31 13:41
n皇后问题看不懂,是不是n*n的棋盘,不一定有n个皇后啊,递归回溯算法是什么思路。哪位大神指教下
最佳答案
- 五星知识达人网友:你可爱的野爹
- 2021-12-31 14:13
就是深搜算法
代码如下:
var ans:array[1..13] of byte;
b,c,d:array[-12..26] of boolean;
n,i,max:longint;
procedure print;
var i:longint;
begin
for i:=1 to n do
write(ans [i] ,' ');
writeln;
end;
procedure gyw(i:integer);
var j:integer;
begin
if i>n then
begin
// print;
inc(max);
end
else for j:=1 to n do
if (b [j] =false)and(c[i+j]=false)and(d[i-j]=false) then
begin
ans [i] :=j;
b [j] :=true;
c[i+j]:=true;
d[i-j]:=true;
gyw(i+1);
b [j] :=false;
c[i+j]:=false;
d[i-j]:=false;
end;
end;
begin
read(n);
gyw(1);
writeln(max);
end.
Pascal的
代码如下:
var ans:array[1..13] of byte;
b,c,d:array[-12..26] of boolean;
n,i,max:longint;
procedure print;
var i:longint;
begin
for i:=1 to n do
write(ans [i] ,' ');
writeln;
end;
procedure gyw(i:integer);
var j:integer;
begin
if i>n then
begin
// print;
inc(max);
end
else for j:=1 to n do
if (b [j] =false)and(c[i+j]=false)and(d[i-j]=false) then
begin
ans [i] :=j;
b [j] :=true;
c[i+j]:=true;
d[i-j]:=true;
gyw(i+1);
b [j] :=false;
c[i+j]:=false;
d[i-j]:=false;
end;
end;
begin
read(n);
gyw(1);
writeln(max);
end.
Pascal的
全部回答
- 1楼网友:何以畏孤独
- 2021-12-31 15:11
思路:递归求阶乘函数,如果输入的参数等于1则返回1,否则返回n乘以该函数下次递归。
参考代码:
#include
int fun(int n)
{
if(n==1||n==0) return 1;//如果参数是0或者1返回1
return n*fun(n-1);//否则返回n和下次递归的积
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",fun(n));
return 0;
}
【递归算法的原理】
递归是计算机科学的一个重要概念,递归的方法是程序设计中有效的方法,采用递归编写
递归能使程序变得简洁和清晰。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯