Prime Path POJ - 3126 bfs

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fuyuyarei/article/details/79285053

刚开始在执行函数中间不小心打错成了que[rear].s
修正了以后发现各种输出0emmm
要用rear-1啊
简单的广搜求最短,枚举素数

#include<stdio.h>
#include<string.h>
int pd[10005];
int book[10005];
int cishu,head,rear;
struct node{
    int s,pre;
}que[100000];
bool bianhuan(int x,int y)
{
    int q[5],p[5],ans=0;
    for(int i=1;i<=4;i++)
    {
        q[i]=x%10;
        x=x/10;
        p[i]=y%10;
        y=y/10;
        if(p[i]==q[i]) ans++;
    }
    if(ans==3) return true;
    else return false;
}
void bfs(int a,int b)
{
    int flag=0;
    if(b==a) return ;
    while(head<rear)
    {
    for(int i=1009;i<=9973;i++)
    {
        if(pd[i]==0 && book[i]==0)
        {
            if(bianhuan(que[head].s,i)==true)
            {
                book[i]=1;
                que[rear].s=i;
                que[rear].pre=head;
                rear++;
                //printf("%d\n",i);
                if(i==b)
                {
                    //printf("%d",que[rear-1].pre);
                    flag=1;
                    break;
                }
            }
        }
        /*if(i==b)
        {
            printf("i b %d %d\n",i,b);
            flag=1;
            break;
        }*/
    }
    //printf("head rear %d %d\n",head,rear);
    //printf("%d\n",flag);
            if(flag==1)
            break;
    head++;
    }
}
void ss(int n)
{
    pd[1]=1;//0代表素数
    for(int i=3;i<=n;i++)
        if(i%2==0) pd[i]=1;
    for(int i=3;i<=n/2;i++)
        if(pd[i]==0)
    {
        for(int j=i+1;j<=n;j++)
            if(j%i==0) pd[j]=1;
    }
}
/*int zhixing(int n)
{
    int cout=0;
    while(que[rear].pre!=0)
    {
        rear=que[rear].pre;
        cout++;
    }
    return cout+1;
}*/
void zhixing(int n)
{
    if(que[n].pre!=-1)
    {
        cishu++;
        zhixing(que[n].pre);
    }
}
void shuchu(int x)
{
    if(que[x].pre!=-1)
    {
        printf("%d\n",que[x].s);
        shuchu(que[x].pre);
    }
}
int main()
{
    int n,a,b;
    memset(pd,0,sizeof(pd));
    ss(10000);
    scanf("%d",&n);
    while(n--)
    {
        cishu=0;
        head=1;
        rear=1;
        memset(book,0,sizeof(book));
        memset(que,0,sizeof(que));
        scanf("%d%d",&a,&b);
        que[rear].s=a;
        que[rear].pre=-1;
        rear++;
        book[a]=1;
        bfs(a,b);
        zhixing(rear-1);//重点!!!!
        //shuchu(rear-1);
        printf("%d\n",cishu);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/fuyuyarei/article/details/79285053