ACM乐园
Love Me,Love My Code!
posts - 53,  comments - 24,  trackbacks - 0
http://acm.hdu.edu.cn/showproblem.php?pid=1016

简单的深搜,要求不重复,设置一个visit数组进行标记,设置result数组进行存储结果。注意dfs后,要重新将visit[i]置0。

#include <iostream>
#include 
<algorithm>

using namespace std;

int result[20];
bool isprime[]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0},visit[20];

int n;

void dfs(int step)
{
    
int i;
    
if(step==n+1)
    
{
        
if(isprime[result[n]+1])
            
for(i=1;i<=n;i++)
                printf(
"%d%c",result[i],i==n?'\n':' ');
        
return ;
    }

    
for(i=2;i<=n;i++)
        
if(!visit[i] && isprime[i+result[step-1]])
        
{
            result[step]
=i;
            visit[i]
=1;
            dfs(step
+1);
            visit[i]
=0;
        }

}


int main()
{
    
int count=1;
    
while(cin>>n)
    
{
        memset(visit,
0,sizeof(visit));
        result[
1]=1;
        cout
<<"Case "<<count++<<":\n";
        dfs(
2);
        cout
<<endl;
    }

    
return 0;
}

posted on 2011-04-07 07:04 大大木马 阅读(511) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2011年4月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

常用链接

留言簿(1)

随笔档案(53)

文章档案(2)

搜索

  •  

积分与排名

  • 积分 - 62451
  • 排名 - 352

最新评论

阅读排行榜

评论排行榜