• hdu1016 Prime Ring Problem


    嘿嘿,终于还是AC了,DFS

    多开了几个数组,稍微加快了一点点,不然就超时了,原来,一点一点的剪枝,还是有那么一点点用滴,看代码吧

    #include<iostream>
    #include<queue>
    using namespace std;
    int prime[]={2,3,5,7,11,13,17,19,23,29,31,37};//相邻俩个数的和顶多就37,所以把其中的所有素数都直接打表了
    int a[20],b[20],n;
    bool hash1[40];
    void init()//哈希表
    {
    	memset(hash1,0,sizeof(hash1));
    	for(int i=0;i<12;i++)
    		hash1[prime[i]]=1;
    }
    void dfs(int t,int cnt)
    {
    	b[cnt]=t;//保存路径
    	if(cnt==n)
    	 {
    		 if(hash1[t+1])//判断是否为素数
    		 {
    			 for(int j=1;j<n;j++)
    				 cout<<b[j]<<' ';
    			cout<<t<<endl;
    		 }
    		 else return ;
    	}
    	int i=t%2==0?3:2;
    	for(;i<=n;i+=2)
    	{
    		
    		if(a[i]!=1&&hash1[t+i]==1)
    		{
    			a[i]=1;
    			dfs(i,cnt+1);
    			a[i]=0;
    		}
    	}
    	return ;
    
    }
    int main()
    {
    	int flag=0;
    	init();
    	while(cin>>n)
    	{
    		flag++;
    		cout<<"Case "<<flag<<":"<<endl;
    		memset(a,0,sizeof(a));
    		a[0]=1;
    		dfs(1,1);
    		cout<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    《架构整洁之道》阅读笔记
    设计模式——单例模式
    设计模式——工厂模式使用
    记一次同事安装我自定义一Python3 SDK在window10安装失败情况
    CentOS7常用的一些命令
    Java
    Java
    Java
    Java
    python
  • 原文地址:https://www.cnblogs.com/nanke/p/2124426.html
Copyright © 2020-2023  润新知