产生书的队列实现

#include<iostream>
#include<cstring>
using namespace std;
char queue[2001][6];
int cnt=0,vis[9999];
char str[6];
struct node{
    int x;
    int y;
};
node a[16];
int c_to_n(char str[],int len)
{
    int i,sum=0;
    for(i=0;i<len;i++)
        sum=sum*10+(str[i]-'0');
    return sum;
}

int main()
{
    int len,d, k,i,head=1,tail=1,j;
    char strls[6];

    scanf("%s",str);
    cin>>k;
    for(i=1;i<=k;i++)
    cin>>a[i].x>>a[i].y;
    len=strlen(str);//这里0不予考虑所以长度是固定的。
    tail++;
    strcpy(queue[head],str);
    vis[c_to_n(str,len)]=1;
        cnt++;
    while(head<tail)
    {    
        strcpy(strls,queue[head]);
        for(i=1;i<=k;i++)
        {
            for(j=0;j<len;j++)
            {
                if(strls[j]==a[i].x+'0') //这里又犯了一个低级错误,就是==写成=,浪费了大量时间来寻找,看来代码量还是太少,继续刷题
                {   strls[j]=a[i].y+'0';
                    d=c_to_n(strls,len);
                    if(vis[d]==0)
                    {
                        strcpy(queue[tail],strls);tail++;cnt++;
                        vis[d]=1;
                        cout<<d<<endl;
                    }
                    strcpy(strls,queue[head]);        
                }
            }    
        }
        head++;
    }
cout<<cnt<<endl;
    
return 0;
}
 

猜你喜欢

转载自blog.csdn.net/u010583225/article/details/81708016