• UVa816,Ordering Tasks,WA


    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <vector>
    using namespace std;
    const char*dirs="NESW";
    const char*turns="FLR";
    int r0,c0,dir,r1,c1,r2,c2,has_edge[20][20][10][6],d[20][20][10];
    int dir_id(char c){
        return strchr(dirs,c)-dirs;
    }
    int turn_id(char c){
        return strchr(turns,c)-turns;
    }
    int dr[]={-1,0,1,0};
    int dc[]={0,1,0,-1};
    struct Node{
        int r,c,dir;
    };
    Node p[20][20][10];
    Node walk(Node u,int turn){
        int dir=u.dir;
        if (turn==1) dir=(dir+3)%4;
        if (turn==2) dir=(dir+1)%4;
        Node t;
        t.r=u.r+dr[dir];t.c=u.c+dc[dir];t.dir=dir;
        return t;
    }
    int init(){
        char ch;
        memset(d,0,sizeof(d));
        cin>>r0>>c0>>ch>>r2>>c2;
        int dir=dir_id(ch);
        r1=r0+dr[dir];c1=c0+dc[dir];
        Node t;
        t.r=r1;t.c=c1;t.dir=dir;
        p[r1][c1][dir]=t;
        int x,y;
        while (cin>>x&&x){
            cin>>y;
            string temp;
            while (cin>>temp&&temp!="*"){
                dir=dir_id(temp[0]);
                for (int i=1;i<temp.size();i++){
                    int turn=turn_id(temp[i]);
                    has_edge[x][y][dir][turn]=1;
                }
            }
        }
    }
    int inside(int x,int y){
        return (x>0&&y>0)?1:0;
    }
    void printf_ans(Node u){
        vector<Node> nodes;
        while (1){
            nodes.push_back(u);
            if (d[u.r][u.c][u.dir]==0) break;
            u=p[u.r][u.c][u.dir];
        }
        Node t;
        t.r=r0;t.c=c0;t.dir=dir;
        nodes.push_back(t);
        int cnt=0;
        for (int i=nodes.size()-1;i>=0;i--){
            if (cnt%10==0) printf(" ");
            printf(" (%d,%d)",nodes[i].r,nodes[i].c);
            if (++cnt %10==0) printf("\n");
        }
        if (nodes.size()%10!=0) printf("\n");
    }
    void solve(){
        queue<Node>q;
        memset(d,-1,sizeof(d));
        Node u;
        u.r=r1;u.c=c1;u.dir=dir;
        d[u.r][u.c][u.dir]=0;
        q.push(u);
        while (!q.empty()){
            Node u=q.front();q.pop();
            if (u.r==r2&&u.c==c2){
                printf_ans(u);
                return;
            }
            for (int i=0;i<3;i++){
                Node v=walk(u,i);
                if (has_edge[u.r][u.c][u.dir][i]&&inside(v.r,v.c)&&d[v.r][v.c][v.dir]<0){
                    d[v.r][v.c][v.dir]=d[u.r][u.c][u.dir]+1;
                    p[v.r][v.c][v.dir]=u;
                    q.push(v);
                }
            }
        }
        printf("No Solution Possible\n");
    }
    int main()
    {
        string Name;
        while (cin>>Name&&Name!="END"){
            cout<<Name<<endl;
            init();
            solve();
        }
    }
    View Code

    WA代码,至今不知道错哪了........哪位大神若是有时间帮我看看吧,code大部分是刘汝佳第二部书上的

  • 相关阅读:
    运维实战:两台服务器http方式共享yum软件仓库
    初始化thinkphp6.0出现的问题解决
    记一次续签SSL证书导致微信小程序部分机型无法访问网站接口
    微信小程序-订阅消息验证发送值有效格式
    微信小程序分包优化
    MySQL timeout 参数详解
    mysql 事件
    springboot 远程拉取配置中心配置
    使用springboot的resttmplate请求远程服务的时候报 403问题
    for 循环 与增强的for循环 经验小结
  • 原文地址:https://www.cnblogs.com/acbingo/p/3870375.html
Copyright © 2020-2023  润新知