题解 | #火车进站#

火车进站

https://www.nowcoder.com/practice/97ba57c35e9f4749826dc3befaeae109

#include<stdio.h>
#include<string.h>

int num;
int train[15]={0};
int train2[15]={0};
int b[15]={0};
int v[15]={0};

int check()
{
    int stack[15];
    int size=0;
    int index=0;
    for(int i=0;i<num;i++)
    {
        stack[size++]=train2[i];
        while(size>0&&stack[size-1]==b[index])
        {
            size--;
            index++;
        }
    }
    if(size==0){return 1;}
    else{return 0;}
    return 0;
}
void dfs1(int i)
{
    if(i>=num)
    {
        if(check())
        {
           for(int m=0;m<num;m++)
            {
                printf("%d ",b[m]);
            }
            printf("\n"); 
        }
        return;
    }
    for(int j=0;j<num;j++)
    {
        if(v[j]==0)
        {
            v[j]=1;
            b[i]=train[j];
            dfs1(i+1);
            v[j]=0;
        }
    }
    return;
}

int main(void)
{
   scanf("%d",&num);
    for(int i=0;i<num;i++)
    {
        scanf("%d",&train2[i]);
    }
    for(int i=0;i<num;i++)
    {
        train[i]=i+1;
    }
    //用dfs1计算全排列
    dfs1(0);
    
    return 0;
}


全部评论

相关推荐

totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务