POJ 1426 Find The Multiple (DFS / BFS)
题目链接:Find The Multiple
解析:直接从前往后搜。设当前数为k用long long保存,则下一个数不是k*10就是k*10+1
AC代码:
/* DFS */ #include <cstdio> #include <iostream> #include <algorithm> #include <queue> using namespace std; long long n; int DEEP; bool flag; void dfs(long long k, int deep){ if(flag) return ; if(deep >= DEEP) return ; //。!个人感觉这样的DFS的方式。事实上还是在模拟BFS。用DEEP控制搜索的深度,当第一层搜不到的时候,DEEP++,继续搜第二层。。! if(k % n == 0){ flag = true; printf("%lld\n", k); return ; } dfs(k*10, deep+1); dfs(k*10+1, deep+1); } int main(){ // freopen("in.txt", "r", stdin); while(scanf("%lld", &n) == 1 && n){ flag = false; for(DEEP=1; ; DEEP++){ //!
。! if(flag) break; dfs(1, 0); } } return 0; }
。。直到找到结果。
BFS还是非常好懂得~
/* BFS */ #include <cstdio> #include <queue> using namespace std; long long n; void bfs(long long k, long long n){ queue<long long> q; q.push(k); while(!q.empty()){ long long x = q.front(); q.pop(); if(x % n == 0){ printf("%lld\n", x); return ; } q.push(x*10); q.push(x*10+1); } return ; } int main(){ // freopen("in.txt", "r", stdin); while(scanf("%lld", &n) == 1 && n){ bfs(1, n); } return 0; }
可是还是有个疑点,为什么就能确定在long long的范围内一定能找到解呢???有待考证
posted on 2017-06-08 11:08 yjbjingcha 阅读(149) 评论(0) 编辑 收藏 举报