深度搜索

hdu  1016

w  1031

素数环

时间比较的短,要注意奇偶剪枝,

只有 奇数可以成环,可以直接输一遍看一下,然后就是 奇数+奇数=偶数+偶数=偶数!=质数;

从这里有可以继续减少分支。

要特别的注意:用c语言的输入输出,不要用c++的,c++的endl,用了没有修改结果 还是时间超时,另外代码里面不 要有注释,注释最好都去掉,也有可能会影响运行时间。


#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int sprim[]={2,3,5,7,11,13,17,19,23,29,31};
int s[20],n;
bool vis[20];

bool isture(int x,int y)
{
	int se(x+y);
	for (int i=0;i<13;i++)
	  if (se==sprim[i])
		 return true;
	return false;
}

void tofind(int x)
{
	if (x>n)
	{
		if (!isture(s[1],s[x-1]))
		return;
		printf("%d",s[1]);
		for (int i=2;i<=n;i++)
		printf(" %d",s[i]); 
		printf("\n");
        return;
	}

	for (int i=2;i<=n;i++)
	{
		if ((i+s[x-1])%2==0)
		 continue;

		if(!vis[i]&&isture(s[x-1],i))
		{
			s[x]=i;
			vis[i]=1;
			tofind(x+1);
			vis[i]=0;  
		}
	}
	  
}

int main()
{
  int i(1);
  while (cin>>n)
  {
	 if(n&1)
	   continue;
     memset(vis,0,sizeof(vis));
	 vis[1]=1;
	 s[1]=1;
	 tofind(2);
  }
	return 0;
}


w1008 选数

这道题更加的坑爹,一个等于号搞了我还去下输入数据。

没有什么好讲的,就是每次的选的数的序号必须比前面的大。

不然的话,代码就是 全排序了。



#include <iostream>
#include <cstring>
using namespace std;
int n,k;
int sev[25];
int s,t;   //  控制序数
long long sum;
bool vis[25];


bool isprim(long long x)
{
	if(x==1||x==0)
		return false;
	for (int i=2;i*i<=x;i++)  // 要注意这里“=” 写成 x+1也可以
		if (x%i==0)
		return false;
	return true;
}

void tofind(int x)
{
	int tt; //  辅助控制前面的序数要比后面的大
	tt=t;
	if(x>k)
	{
      if (isprim(sum))
		  s++;
      return;
	}
	for(int i=1;i<=n;i++)
	{
		if (!vis[i]&&t<i)
		{
			vis[i]=1;
			t=i;
			sum+=sev[i];
			tofind(x+1);
			t=tt;
			sum-=sev[i];
			vis[i]=0;
		}
	}

}

int main()
{

	while (cin>>n>>k)
	{
		memset(vis,0,sizeof(vis));
		s=t=0;
		sum=0;

		for (int i=1;i<=n;i++)
		   cin>>sev[i];
		
		tofind(1);
		cout<<s<<endl;

	}

	return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值