码迷,mamicode.com
首页 > 其他好文 > 详细

诡异的楼梯 HDU1180

时间:2019-01-23 10:38:03      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:就是   思路   gif   ping   pop   lse   技术   img   顺序   

这题做了很久  

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

一个要点就是   当楼梯过不去的时候不能是先过去时间加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\n",u.x,u.y,u.d);
        if(u.x==ex&&u.y==ey){printf("%d\n",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\n",sx,sy,ex,ey);
         bfs();
       //printf("pl");

    }





    return 0;
}
View Code

 

诡异的楼梯 HDU1180

标签:就是   思路   gif   ping   pop   lse   技术   img   顺序   

原文地址:https://www.cnblogs.com/bxd123/p/10307122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!