POJ 1426 随机深搜
来源:互联网 发布:java equals 编辑:程序博客网 时间:2024/06/04 18:42
从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为trueint 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;}
- POJ 1426 随机深搜
- 【随机算法】poj 3318
- poj 2454 随机
- bzoj2296 【POJ Challenge】随机种子
- POJ 3318 Matrix Multiplication 随机
- 2296: 【POJ Challenge】随机种子
- 【随机算法】poj 2576/zoj 1880
- POJ 3318 矩阵乘法 随机算法
- poj 3318 随机(矩阵相乘判断)
- POJ 3318 Matrix Multiplication(随机算法)
- [乱搞] BZOJ 2296 [POJ Challenge] 随机种子
- BZOJ 2296 【POJ Challenge】随机种子 构造
- POJ 2425 随机算法 解题报告
- 随机
- 随机
- 随机
- 随机
- 随机
- 更为复杂的REST请求
- wince USB摄像头驱动学习笔记(修改中)
- Spring3.0实现REST实例
- jax-ws(Java API for XML Web Services)实践教程
- jax-rs(Java API for RESTful Web Services)实践教程 之二 —— get/post/put/delete/head
- POJ 1426 随机深搜
- C++学习之一、掌握类和对象
- JDOM创建XML文档实例
- 关于Linux中换行符号的问题
- nodejs异步IO的实现
- 在开发中如何判断连接超时,在超时的同时去中断
- 九个让人难以置信的HTML5和JavaScript实验
- 【二分图+最大匹配】北大 poj 2536 Gopher II
- Android提高十六篇之使用NDK把彩图转换灰度图