POJ ——1465(宽度搜索)

来源:互联网 发布:layabox js教程 编辑:程序博客网 时间:2024/06/05 02:34

题目链接:http://poj.org/problem?id=1465


源代码:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int m,n;
int flag[5050];
int a[5000];
struct Que
{
int digite;
int mod;
int pre;
}queue[5000];


void output(Que t)
{
if(t.pre!=-1)
 {
 output(queue[t.pre]); 
      cout<<t.digite;
 }
}
void bfs()
{
int front,per;
int sign=0;
    queue[0].digite=0;
    queue[0].mod=0;
    queue[0].pre=-1;
    front=0;
    per=1;
    int r;
    while(front<per)
    {
    Que t;
    Que moder=queue[front];
    for(int i=0;i<n;i++)
    {
      r=(moder.mod*10+a[i])%m;
      if(!flag[r]&&(moder.pre!=-1||a[i]>0))
      {
      flag[r]=1;
t.digite=a[i];
      t.mod=r;
      t.pre=front;
      queue[per++]=t;
      if(r==0)
      {
    output(t);
    cout<<endl;
    sign=1;
    break;
    }
      }
     }
     front++;
     if(sign) break;
    }
    if(!sign)  cout<<"0"<<endl;

}
int main()
{
while(cin>>m)
{
cin>>n;
for(int i=0;i<n;i++)
    cin>>a[i];
memset(flag,0,sizeof(flag)); 
        sort(a,a+n);
        if(m==0)
        {
        cout<<"0"<<endl;
        continue;
        }
        bfs();
}
return 0;
}