码迷,mamicode.com
首页 > 其他好文 > 详细

codevs1031

时间:2015-07-18 17:10:34      阅读:178      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!