C++算法:广度优先搜索大数

来源:互联网 发布:linux 线程挂起 编辑:程序博客网 时间:2024/05/18 08:12
//求一个数m它的各个数位只由0或1构成,并且能被输入的整数n整除```广度优先搜索大数应用#include<iostream>#include<cstdio>using namespace std;struct node{  int a, b; //a保存0,1,b保存余数  int pre; //前一个节点}queue[200];void output(int k){  if (queue[k].pre >= 0)  {    output(queue[k].pre);  }  cout << queue[k].a << endl;}int main(){  int n, r, i, j, L;  queue[0].a = 1;  queue[0].b = 1;  queue[0].pre = -1;  cin >> n;  while(1)//除数  {    if (n == 0)      return 0;    char used[200] = {0};    used[1] = 1;    L = 1;    if (n > 1)    {      for (i = 0; i < L; i++)      {        for (j = 0; j < 2; j++)        {          r = (queue[i].b * 10 + j) % n;          if (!used[r])          {            queue[L].a = j;    queue[L].b = r; //用余数继续乘10+0或+1循环乘、取余直到整除queue[L].pre = i;used[r] = 1;L++;//用来控制输出0 1序列的,构造是从右往左,输出时从左往右(L-1开始)          }          if (r == 0)            break;        }        if (r == 0)          break;      }    }    output(L - 1);    cout << '\n';  }  return 0;}

0 0
原创粉丝点击