(水)POJ-1426 BFS,DFS
来源:互联网 发布:linux任务管理器 编辑:程序博客网 时间:2024/04/29 10:18
题目大意:给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数十进制m,要求m必须只由'0'或'1'组成。
题目链接:点击打开链接
分析:网上将这题放在BFS里其实感觉没DFS恰当,因为DFS的话不会超时。这里为什么解都在long long范围里我也搞不懂。这里DFS,BFS的代码我都给上,注意BFS用c++提交会TLE而用g++就能AC,神奇的POJ。。。。
附上代码:
DFS:#include<iostream>#include<cstdlib>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<queue>using namespace std;bool found;void DFS(unsigned __int64 t ,int n,int k){ if(found) return ;//如果已经发现了答案就没搜的必要了 if(t%n==0) {//发现答案,输出,标记变量该true printf("%I64u\n",t); found=true; return ; } if(k==19)//到第19层,回溯 return ; DFS(t*10,n,k+1); //搜索×10 DFS(t*10+1,n,k+1); //搜索×10+1}int main(){ int n; while(cin>>n,n) { found=false;//标记变量,当为true代表搜到了题意第一的m DFS(1,n,0); //从1开始搜n的倍数,第三个参数代表搜的层数,当到第19层时返回(因为第20层64位整数存不下) } return 0;}BFS:#include <iostream>#include <queue>using namespace std;int n;long long fs(){ queue<long long> q; q.push(1); while(!q.empty()) { if(q.front()%n==0) return q.front(); long long p=q.front(); q.pop(); q.push(p*10); q.push(p*10+1); } return 0; }int main(){ while(cin>>n&&n) cout<<fs()<<endl; return 0;}
0 0
- (水)POJ-1426 BFS,DFS
- POJ 1979--DFS or BFS(水)
- POJ 3083(DFS+BFS)
- POJ 3083 (bfs + dfs)
- Poj 1426--Find The Multiple(bfs或dfs)
- POJ 1426 Find The Multiple (DFS / BFS)
- POJ-1426-Find The Multiple(BFS DFS)
- (水)POJ-1979 Red and Black(dfs,bfs)
- POJ 1426 DFS BFS两种写法
- poj 1426 Find The Multiple (bfs / dfs)
- poj 3083 DFS+DFS+BFS
- poj 2386Lake Counting(DFS, BFS)
- poj 3984 BFS+DFS(保存路径)
- POJ 1130(一道纯水,bfs+dfs)
- POJ 3414 Pots (DFS || BFS)
- POJ 3984 迷宫问题 (DFS+BFS)
- poj Find The Multiple(DFS,BFS)
- POJ 1062 BFS+DFS
- bash有意思的记录
- poj 3264 Balanced Lineup(ST)
- 【操作系统】操作系统基础
- 写给大家看的Web设计书
- edit distance
- (水)POJ-1426 BFS,DFS
- LeetCode(java)7. Reverse Integer
- 【4】mysql 表的DDL
- poj 1042 Gone Fishing(贪心)
- 关于TextView的一个demo
- android中画文字的换行 办法(对于遇到canvas.drawText(String s )无法实现换行问题的解决)
- C/C++中volatile关键字
- Android面试常问的技术问题
- 算算你的时间差