很明显的一个bfs。
/*
POJ: 1426 Find The Multiple
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
bool visited[200];
queue<long long>que;
long long bfs(int n)
{
memset(visited, false, sizeof(visited));
while(!que.empty())
que.pop();
que.push(1);
while(!que.empty()) {
long long tmp = que.front();
que.pop();
int t = tmp % n;
if(t == 0)
return tmp;
if(!visited[t]) {
visited[t] = true;
for(int i = 0; i < 2; i++) {
long long next = tmp * 10 + i;
if(next % n == 0)
return next;
que.push(next);
}
}
}
}
int main()
{
freopen("data.in", "rb", stdin);
int n;
while(scanf("%d", &n) && n) {
printf("%lld\n", bfs(n));
}
return 0;
}
本文介绍了一个使用广度优先搜索(BFS)算法解决寻找最小正整数倍数的问题。通过队列实现节点的遍历,并利用哈希表记录已访问状态避免重复计算。代码示例展示了从1开始不断乘以10再加0或1的方式,直至找到能被给定整数整除的最小数。

257

被折叠的 条评论
为什么被折叠?



