コード例 #1
0
int main()
{
    while (fgets(instr, sizeof(instr), stdin) != NULL)
    {
        if(instr[0] == '\n') continue;
        instr[strlen(instr) - 1] = '\0';
        flag = false;
        memset(ms, '\0', sizeof(ms));
        memset(Hs, '\0', sizeof(Hs));
        memset(ds, '\0', sizeof(ds));
        memset(Ms, '\0', sizeof(Ms));
        memset(ys, '\0', sizeof(ys));
        int cur = predeal(instr);
        DFS(instr, 0, cur);
        printEle();
    }
    return 0;
}
コード例 #2
0
ファイル: elevator.c プロジェクト: sigmax6/sigmav
void * procEle(void)
{
    int floorPtr;
    while(1)
    {
        switch(ELEINFO.Statu)                                 //依据当前状态判断处理方式
        {
        case stop:                                         //停止状态处理------------------------
            if(ELEINFO.Request[ELEINFO.Floor].Req!=-1)
            {
                ELEINFO.Request[ELEINFO.Floor].Req=-1;
                ELEINFO.Request[ELEINFO.Floor].outReq=no;
                ELEINFO.Statu=open;
            }
            else
            {
                floorPtr=ELEINFO.Floor;
                while(floorPtr<MAX_FLOOR)
                {
                    if(ELEINFO.Request[floorPtr].Req!=-1)
                        break;
                    floorPtr++;
                }
                if(floorPtr<MAX_FLOOR)
                {
                    ELEINFO.Direction=up;
                    ELEINFO.Statu=run;
                }
                else
                {
                    floorPtr=0;
                    while(floorPtr<ELEINFO.Floor)
                    {
                        if(ELEINFO.Request[floorPtr].Req!=-1)
                            break;
                        floorPtr++;
                    }
                    if(floorPtr<ELEINFO.Floor)
                    {
                        ELEINFO.Direction=down;
                        ELEINFO.Statu=run;
                    }
                }
            }
            break;
        case run:                                             //运行状态处理---------------------
            if(ELEINFO.Direction==up)
            {
                if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq!=down_req)
                {
                    ELEINFO.Statu=open;
                }
                else
                {
                    floorPtr=ELEINFO.Floor;
                    while(floorPtr<MAX_FLOOR)
                    {
                        if(ELEINFO.Request[floorPtr].Req!=-1)
                            break;
                        floorPtr++;
                    }
                    if(floorPtr<MAX_FLOOR)
                    {
                        ELEINFO.Floor++;
                    }
                    else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq==down_req)
                    {
                        ELEINFO.Statu=open;
                    }
                    else
                    {
                        floorPtr=0;
                        while(floorPtr<ELEINFO.Floor)
                        {
                            if(ELEINFO.Request[floorPtr].Req!=-1)
                                break;
                            floorPtr++;
                        }
                        if(floorPtr<ELEINFO.Floor)
                        {
                            ELEINFO.Direction=down;
                        }
                    }
                }
            }
            else
            {
                if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq!=up_req)
                {
                    ELEINFO.Statu=open;
                }
                else
                {
                    floorPtr=0;
                    while(floorPtr<ELEINFO.Floor)
                    {
                        if(ELEINFO.Request[floorPtr].Req!=-1)
                            break;
                        floorPtr++;
                    }
                    if(floorPtr<ELEINFO.Floor)
                    {
                        ELEINFO.Floor--;
                    }
                    else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1&&ELEINFO.Request[ELEINFO.Floor].outReq==up_req)
                    {
                        ELEINFO.Statu=open;
                    }
                    else
                    {
                        floorPtr=ELEINFO.Floor;
                        while(floorPtr<MAX_FLOOR)
                        {
                            if(ELEINFO.Request[floorPtr].Req!=-1)
                                break;
                            floorPtr++;
                        }
                        if(floorPtr<ELEINFO.Floor)
                        {
                            ELEINFO.Direction=up;
                        }
                    }
                }
            }
            break;
        case open:                                             //开门状态处理----------------------
            ELEINFO.Statu=close;
            if(ELEINFO.Direction==up)
            {
                if(ELEINFO.Request[ELEINFO.Floor].Req==1&&ELEINFO.Request[ELEINFO.Floor].outReq==both)
                {
                    ELEINFO.Request[ELEINFO.Floor].outReq=down_req;
                }
                else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1)
                {
                    ELEINFO.Request[ELEINFO.Floor].outReq=no;
                    ELEINFO.Request[ELEINFO.Floor].Req=-1;
                }
            }
            else if(ELEINFO.Direction==down)
            {
                if(ELEINFO.Request[ELEINFO.Floor].Req==1&&ELEINFO.Request[ELEINFO.Floor].outReq==both)
                {
                    ELEINFO.Request[ELEINFO.Floor].outReq=up_req;
                }
                else if(ELEINFO.Request[ELEINFO.Floor].Req!=-1)
                {
                    ELEINFO.Request[ELEINFO.Floor].outReq=no;
                    ELEINFO.Request[ELEINFO.Floor].Req=-1;
                }
            }
            else
            {
                ELEINFO.Request[ELEINFO.Floor].outReq=no;
                ELEINFO.Request[ELEINFO.Floor].Req=-1;
            }
            break;
        case close:                                              //关门状态处理----------------------
            if(ELEINFO.Direction==up)
            {
                floorPtr=ELEINFO.Floor;
                while(floorPtr<MAX_FLOOR)
                {
                    if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=down_req)
                      break;
                    floorPtr++;
                }
                if(floorPtr<MAX_FLOOR)
                {
                        ELEINFO.Statu=run;
                }
                else
                {
                    floorPtr=0;
                    while(floorPtr<ELEINFO.Floor)
                    {
                        if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=up_req)
                            break;
                        floorPtr++;
                    }
                    if(floorPtr<ELEINFO.Floor)
                    {
                        ELEINFO.Statu=run;
                        ELEINFO.Direction=down;
                    }
                    else
                    {
                        ELEINFO.Statu=stop;
                        ELEINFO.Direction=still;
                    }
                }
            }
            else
            {
                floorPtr=0;
                while(floorPtr<ELEINFO.Floor)
                {
                    if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=up_req)
                        break;
                    floorPtr++;
                }
                if(floorPtr<ELEINFO.Floor)
                {
                    ELEINFO.Statu=run;
                }
                else
                {
                    floorPtr=ELEINFO.Floor;
                    while(floorPtr<MAX_FLOOR)
                    {
                        if(ELEINFO.Request[floorPtr].Req!=-1&&ELEINFO.Request[floorPtr].outReq!=down_req)
                            break;
                        floorPtr++;
                    }
                    if(floorPtr<MAX_FLOOR)
                    {
                        ELEINFO.Statu=run;
                        ELEINFO.Direction=up;
                    }
                    else
                    {
                        ELEINFO.Statu=stop;
                        ELEINFO.Direction=still;
                    }
                }
            }
            break;
        }
        //------------------------------------------
        printEle();                              //打印当前状态
        sleep(1);
        //------------------------------------------
    }
}