ZOJ2771题解

 
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    int data;
    int floor;
    int flag;
    }node;
typedef struct QNode{
    node data;
    struct QNode *next;
    }QNode,*QueueP;
typedef struct {
    QueueP font;
    QueueP rear;
    }LinkQueue;
LinkQueue Q;
void InitQueue(LinkQueue &Q){
    Q.font=Q.rear=(QueueP )malloc(sizeof(QNode));
    Q.font->next=NULL;
    }
void EnQueue(LinkQueue &Q,node e){
    QueueP p;
    p=(QueueP )malloc(sizeof(QNode));
    p->data=e;
    p->next=NULL;
    Q.rear->next=p;
    Q.rear=p;
    }
void DeQueue(LinkQueue &Q,node &head){
    QueueP p;
    p=Q.font->next;
    head=p->data;
    Q.font->next=p->next;
    if(Q.rear==p)Q.rear=Q.font;//如果队列中的最后一个元素被删除的时候,队尾指针也会被删除所以要将队头指针赋给队尾,然后再释放p 
    free(p);
    }
int QueueEmpty(LinkQueue Q){
    if(Q.font==Q.rear)return 1;
    else return 0;
    }


void DataInit(void){
    node temp;
    for(int i=2;i<5;i++){
        temp.data=i;
        temp.floor=1;
        temp.flag=1;
        EnQueue(Q,temp);
        }
    } 
void Mindata(node e){
    int temp=e.data;
    node temp1;
    while(temp>1){
        temp1.data=--temp;
        temp1.floor=e.floor+1;
        temp1.flag=0;
        EnQueue(Q,temp1);
        }
    }
void Maxdata(node e){
    int temp=e.data;
    node temp1;
    while(temp<4){
        temp1.data=++temp;
        temp1.floor=e.floor+1;
        temp1.flag=1;
        EnQueue(Q,temp1);
        }
    }
void ChoiceData(node e){
    if(e.flag)Mindata(e);
    else Maxdata(e);
    }
int main(){
    int t;
    long long count;
    while(scanf("%d",&t)!=EOF){
        count=0;
        node head;
        InitQueue(Q);
        if(t==0)printf("1\n");
        else if(t==1)printf("3\n");
        else if(t>1){
            DataInit();
            DeQueue(Q,head);
            
            while(head.floor<=t){
                if(head.floor==t) 
                    count++;
                   

               
                     ChoiceData(head);
                     DeQueue(Q,head);
                    
                }
                printf("%d\n",count);
            }
            
        }
    }


上面用的是搜索的算法,这几天不是在学搜索嘛,所以还是用搜索写的,但是参考别人的时候才知道这个用DP来写的,虽然我写的这个是超时的,运算的速度比较慢,但是结果什么的还是很正确的。

    现在还没有真正的懂得动态规划的写法,所以自觉这样正是一个好的引导过程,让我明白动态规划的优越性,一步一步的让自己往那个方面努力,因为自己本来就不太喜欢那种一直灌输性的知识,总是喜欢那种探索式的前进,基于这个想法,我觉得这个代码的意义还是蛮大的,至少让我明白了,搜索并不是适用用任何问题,效率问题有必要考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值