BFS
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1000100;
int dis[MAXN],pre[MAXN];
char ans[MAXN];
int main()
{
int n,i,now,cnt,nxt;
while(scanf("%d",&n)!=EOF)
{
memset(dis,-1,sizeof(dis));
dis[1]=1;
pre[1]=-1;
queue<int> q;
q.push(1);
while(!q.empty())
{
now=q.front();
q.pop();
for(i=0;i<=1;i++)
{
nxt=(now*10+i)%n;
if(dis[nxt]!=-1)
continue;
dis[nxt]=dis[now]+1;
pre[nxt]=now;
q.push(nxt);
}
}
now=0;
cnt=0;
while(pre[now]!=-1)
{
if((pre[now]*10+1)%n==now)
ans[cnt++]='1';
else
ans[cnt++]='0';
now=pre[now];
}
ans[cnt++]='1';
for(i=cnt-1;i>=0;i--)
printf("%c",ans[i]);
printf("\n");
}
}

本文介绍了一个使用BFS(广度优先搜索)算法解决特定数学问题的C++实现案例。通过队列来遍历并记录从1开始到目标整数n的所有可能路径,找到最短路径。该程序使用了预定义的最大节点数量,并且为每个节点初始化了距离和前驱变量。
960

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



