zoukankan      html  css  js  c++  java
  • 诡异的楼梯 HDU1180

    这题做了很久  

    做好了感觉很简单。。。 现在做题思路更加清晰了 

    一个要点就是   当楼梯过不去的时候不能是先过去时间加2  必须得回去等一秒   否则queue的时间顺序会被打破

    #include<bits/stdc++.h>
    using namespace std;
    
    int sx,sy,ex,ey;int n,m;
    char m1[31][31];
    bool f[31][31];
    
    
    struct node
    {
        int x,y,d;
        node(int x=0,int y=0,int d=0):x(x),y(y),d(d){}
    };
    
    
    
    void bfs()
    {
        memset(f,false,sizeof(f));
        int dx[4]={0,1,0,-1};
        int dy[4]={1,0,-1,0};
        node u(sx,sy,0);
        queue<node>q;
        q.push(u);
    
        while(!q.empty())
        {
            u=q.front();q.pop();
           //  printf("%d %d %d
    ",u.x,u.y,u.d);
            if(u.x==ex&&u.y==ey){printf("%d
    ",u.d);return;}
    
            for(int i=0;i<4;i++)
            {
                node v(u.x+dx[i],u.y+dy[i],u.d+1);
    
                if(v.x>=1&&v.x<=n&&v.y>=1&&v.y<=m&&m1[v.x][v.y]!='*')
                {
    
                  if(m1[v.x][v.y]=='|')
                  {
                      if(i==0||i==2)//shuiping
                      {
                          if(v.d%2==1&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);}
    
                           else if (v.d%2==0&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];q.push(v);}
    
    
                      }
                     if(i==1||i==3)
                     {
                         if(v.d%2==1&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];f[v.x][v.y]=true;q.push(v);}
    
                           else if (v.d%2==0&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);}
                     }
    
    
                  }
    
    
    
                     if(m1[v.x][v.y]=='-')
                  {
                      if(i==0||i==2)//shuiping
                      {
                          if(v.d%2==1&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];q.push(v);}
    
                           else if (v.d%2==0&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);}
    
    
                      }
                     if(i==1||i==3)
                     {
                         if(v.d%2==1&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x-=dx[i];v.y-=dy[i];q.push(v);}
    
                           else if (v.d%2==0&&f[v.x+dx[i]][v.y+dy[i]]==false){v.x+=dx[i];v.y+=dy[i];f[v.x][v.y]=true;q.push(v);}
                     }
    
    
                  }
    
    
    
    
    
    
    
    
                    else if(f[v.x][v.y]==false&&(m1[v.x][v.y]=='.'||v.x==ex&&v.y==ey))
                    {
                        f[v.x][v.y]=true;q.push(v);
                    }
    
    
                }
    
    
    
            }
    
    
    
        }
    
    
    
    
    
    }
    
    
    
    
    
    int main()
    {
    
        while(scanf("%d%d",&n,&m)==2)
        {
           for(int i=1;i<=n;i++)
           {
               scanf("%s",m1[i]+1);
               for(int j=1;j<=m;j++)
               {
                   if(m1[i][j]=='S'){sx=i;sy=j;}
                   if(m1[i][j]=='T'){ex=i;ey=j;}
    
    
               }
    
    
           }
    
    
    
              //  printf("%d %d %d %d
    ",sx,sy,ex,ey);
             bfs();
           //printf("pl");
    
        }
    
    
    
    
    
        return 0;
    }
    View Code
  • 相关阅读:
    旋转变换(一)旋转矩阵
    DICOM中几个判断图像方向的tag
    RGB与HSB之间的转换公式
    Delphi图像处理 -- RGB与HSL转换
    指针类型(C# 编程指南)
    关于 Delphi 中流的使用(2) 用 TFileStream(文件流) 读写
    [转载]Delphi Tokyo 10.2.3发布了
    如果设置网络优先级
    .gitignore详解
    Win10 兼容性 Visual studio web应用程序 ASP.NET 4.0 尚未在 Web 服务器上注册
  • 原文地址:https://www.cnblogs.com/bxd123/p/10307122.html
Copyright © 2011-2022 走看看