• 1319


    //题意:最短路+方向

    //在搜索的时候加上方向;

    //良辰的代码
    #include<stdio.h>
    #include<string.h>
    #include<queue>
    using namespace std;
    char map[200][200];
    int use[200][200][4],n,m;
    int dir[5][2]={0,0,-1,0,1,0,0,-1,0,1};//原点,上下左右
    struct node{
        int x;
        int y;
        int count;
        int di;
    };
    int BFS(int ix,int iy){
        node tem;
        tem.x=ix;
        tem.y=iy;
        tem.count=0;
        tem.di=1;
        use[ix][iy][1]=1;
        queue<node> que;
        que.push(tem);////起点入队
        while(!que.empty())
        {
            node now=que.front();
            que.pop();
            node next=now;
            if(map[now.x][now.y]=='T')
                return now.count;
            next.x=now.x+dir[now.di][0];//
            next.y=now.y+dir[now.di][1];//
            if(next.x>=0&&next.y>=0&&next.x<n&&next.y<m&&!use[next.x][next.y][next.di]&&map[next.x][next.y]!='#')
            {
                next.count++;
                use[next.x][next.y][next.di]=1;
                que.push(next);
            }
            next=now;//
            if(now.di==1||now.di==2)//1
            {
                next.di=3;
                if(!use[next.x][next.y][next.di])
                {
                    next.count++;
                    use[next.x][next.y][next.di]=1;
                    que.push(next);
                }
                next=now;
                next.di=4;
                if(!use[next.x][next.y][next.di])
                {
                    next.count++;
                    use[next.x][next.y][next.di]=1;
                    que.push(next);
                }
                
            }
            next=now;
            if(now.di==3||now.di==4)//2
            {
                next.di=2;
                if(!use[next.x][next.y][next.di])
                {
                    next.count++;
                    use[next.x][next.y][next.di]=1;
                    que.push(next);
                }
                next=now;
                next.di=1;
                if(!use[next.x][next.y][next.di])
                {
                    next.count++;
                    use[next.x][next.y][next.di]=1;
                    que.push(next);
                }
                
            }
        }
        return -1;
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            memset(use,0,sizeof(use));
            int ix=0,iy=0;
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;i++)
                scanf("%s",map[i]);
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                    if(map[i][j]=='S'){
                        ix=i;iy=j;break;
                    }
            int ans;
            ans=BFS(ix,iy);
            printf("%d
    ",ans);
        }
        return 0;
    }

    想的太多,做的太少。
  • 相关阅读:
    【转】高性能网络编程4--TCP连接的关闭
    Kubernetes 用了,延迟高了 10 倍,问题在哪?
    多路复用和多路分用
    网络七层模型与四层模型区别
    Go验证包出错 dial tcp 34.64.4.17:443: i/o timeout
    spring Bean配置的三种形式
    Spring容器IOC初始化过程
    Go 特殊语法
    服务发现的基本原理与比较:Eureka vs Consul vs Zookeeper
    docker 常用命令
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115659.html
Copyright © 2020-2023  润新知