题目链接
UVa 524
方法:DFS
题目分析
题目大意
一个数字n,将1~n这n个数排成一个环,使任意两个相邻的数字相加为一个素数。
解析
怎么想到的DFS,我也不知道。
思路是这样:先建一个类似于邻接表的表g[][],比如g[i]这一行,就储存所有和i相加为素数的数,g[i]这一行的元素个数储存在head[i]中。因为这个环一定是从1开始的,所以从1开始dfs。每次dfs将数字标记上已访问,记录层数,也就是DFS参数中的moves,并且将数字放在结果数组ans[]中。如果到最后一层,也就是n个数全部访问之后,判断最后一个数字和第一个数(也就是1)相加是不是素数,如果是素数,输出这一串数字。
代码
1 |
|