首页 > 其他 > 详细

codevs1031

时间:2015-07-18 17:08:01      阅读:141      评论:0      收藏:0      [点我收藏+]

题目地址:http://codevs.cn/problem/1031/

分析:

深搜回溯

代码:

 var s:set of 1..17;
a:array[1..17]of word;
n:word;
b:boolean;

procedure print;{输出}
var i:word;
begin
for i:=1 to n do
write(a[i],‘ ‘);
writeln;
end;

function pd(x:word):boolean;{判断是否素数}
var i:word;
begin
pd:=true;
for i:=2 to trunc(sqrt(x))do
if x mod i=0 then begin pd:=false; break;end;
end;

procedure search(k:word);{回溯搜索}
var i:word;
begin
a[1]:=1;{将1定为起始}
for i:=2 to n do
if (i in s)and(pd(i+a[k-1]))then begin
a[k]:=i;
s:=s-[i];
if (k=n)and(pd(i+a[1])) then print{别忘记判断第一个和最后1个}
else search(k+1);
s:=s+[i];
end;
end;

begin
readln(n);
if (n mod 2=1) then halt;{单数肯定不会有,数学想想便知}
s:=[2..n];
search(2);
end.


版权声明:本文为博主原创文章,未经博主允许不得转载。

codevs1031

原文:http://blog.csdn.net/boyxiejunboy/article/details/46943029

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!