POJ 1426 随机深搜

从1开始后面补0,或1,不断搜下去,直到搜到结果为止。相当于模拟除法的过程。

DFS,BFS均可,由于我用DFS,防止出现极端情况(比如10000000000000000000000000),于是就让深搜方向随机选择,就可防止这种情况出现。不过,不知为什么G++提交老runtime error。

剪枝的方法(如果随机DFS,剪枝效率不明显):模拟除法过程,如果余数出现相同就不再搜下去了。



#include <iostream>
#include <cstdio>
#include <queue>
#include <ctime>
#include <cstdlib>
#include <cstring>
using namespace std;
int n;
bool flag;//如果搜到成功,flag为true
int AnsLen;
char ans[110];//最后结果
bool visit[250];//剪枝标记
void dfs(int remainder,int num,char res[],int depth)//remainder为余数,depth为搜索深度
{
	if(depth >101)
	{
		return;

	}
	if(flag == true)
	{
		return;
	}
	depth++;
	int Cremainder;
	Cremainder =(remainder * 10) % num;
	if(Cremainder == 0)//余数为0,则索到答案
	{
		res[depth]='0';
		res[depth + 1]='\0';
		strcpy(ans,res);
		// printf("%s\n",res);
		AnsLen = strlen(res);
		flag = true;
		return;
	}



	//////////////////
	Cremainder =(remainder * 10 + 1) % num;
	if(Cremainder == 0)
	{
		res[depth]='1';
		res[depth + 1]='\0';
		strcpy(ans,res);
		AnsLen =strlen(res);
		// printf("%s\n",res);
		flag = true;
		return;
	}

	///////////////////////////
	int cnum;

	cnum =rand() % 2;//随机选择搜索方向
	if(cnum == 1)
	{
		Cremainder =(remainder * 10) % num;
		res[depth]='0';
		res[depth + 1]='\0';


		dfs(Cremainder,num,res,depth);
		///////////////
		Cremainder =(remainder * 10 + 1) % num;
		res[depth]='1';
		res[depth + 1]='\0';
		if(visit[Cremainder] == false)
		{
			visit[Cremainder] = true;
			dfs(Cremainder,num,res,depth);

		}
	}
	else
	{
		Cremainder =(remainder * 10 + 1) % num;
		res[depth]='1';
		res[depth + 1]='\0';
		dfs(Cremainder,num,res,depth);
		/////////////
		Cremainder =(remainder * 10) % num;
		res[depth]='0';
		res[depth + 1]='\0';
		if(visit[Cremainder] == false)
		{
			visit[Cremainder] = true;
			dfs(Cremainder,num,res,depth);
		}

	}





}
int main()
{
	int num;
	srand(time(NULL));
	while(scanf("%d",&num) != EOF)
	{
		if(num == 0)
		{
			break;
		}
		int remainder;
		remainder = 1;
		char res[110];
		while(1)
		{
			res[0] = '1';
			res[1] = '\0';
			flag = false;
			memset(visit,0,sizeof(visit));
			dfs(remainder,num,res,0);
			if(AnsLen <= 100 && flag == true)
			{
				printf("%s\n",ans);
				break;
			}

		}



	}
	return 0;
}


这个是完整源码 python实现 Flask,Vue 【python毕业设计】基于Python的Flask+Vue物业管理系统 源码+论文+sql脚本 完整版 数据库是mysql 本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发展随后依照传统的软件开发流程,最先为系统挑选适用的言语和软件开发平台,依据需求分析开展控制模块制做和数据库查询构造设计,随后依据系统整体功能模块的设计,制作系统的功能模块图、E-R图。随后,设计框架,依据设计的框架撰写编码,完成系统的每个功能模块。最终,对基本系统开展了检测,包含软件性能测试、单元测试和性能指标。测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。本文首先实现了基于Python的Flask+Vue物业管理系统技术的发
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值