现在的位置: 首页 > 综合 > 正文

HDU 1180题 诡异的楼梯

2019年02月26日 ⁄ 综合 ⁄ 共 1538字 ⁄ 字号 评论关闭

 题目链接~~>

                     这题其实很简单,在走楼梯时只要判断是否能走就可以,如果不能走,可以选择等下一分钟再走,还有一点就是楼梯不能标记,可以从不同方向过。

代码:

#include<stdio.h>
#include<queue>
using namespace std ;
int dx[4]={-1,1,0,0},dy[4]={0,0,1,-1} ;
char s[25][25] ;
int m,n ;
struct zhang
{
    int x,y,bu ;
} ;
int bfs(int x,int y)
{
      queue<zhang>q ;
      zhang current,next ;
      int sx,sy ;
      current.x=x ;
      current.y=y ;
      s[x][y]='*' ;
      current.bu=0 ;
      q.push(current) ;
      while(!q.empty())
         {
               current=q.front() ;
               q.pop() ;
               for(int i=0;i<4;i++)
                 {
                     next.x=current.x+dx[i] ;
                     next.y=current.y+dy[i] ;
                     if(next.x>=0&&next.x<n&&next.y>=0&&next.y<m&&s[next.x][next.y]!='*')
                       {
                             next.bu=current.bu+1 ;
                             sx=next.x+dx[i] ;
                             sy=next.y+dy[i] ;
                           if(s[next.x][next.y]=='|'&&s[sx][sy]!='*')
                            {
                               if(current.bu%2&&(i==3||i==2))
                                {
                                        next.x=sx ;
                                        next.y=sy ;
                                        if(s[sx][sy]=='T')
                                             return next.bu ;
                                        s[sx][sy]='*' ;
                                        q.push(next) ;
                                }
                               else if(current.bu%2==0&&(i==0||i==1))
                                  {
                                             next.x=sx ;
                                             next.y=sy ;
                                             if(s[sx][sy]=='T')
                                                return next.bu ;
                                             s[sx][sy]='*' ;
                                             q.push(next) ;
                                  }
                                else {
                                          next.x=current.x ;
                                          next.y=current.y ;
                                          q.push(next) ;
                                     }
                            }
                           else if(s[next.x][next.y]=='-'&&s[sx][sy]!='*')
                           {
                                   if(current.bu%2==0&&(i==3||i==2))
                                   {
                                            next.x=sx ;
                                            next.y=sy ;
                                            if(s[sx][sy]=='T')
                                                  return next.bu ;
                                            s[sx][sy]='*' ;
                                            q.push(next) ;
                                   }
                               else if(current.bu%2==1&&(i==0||i==1))
                                  {
                                             next.x=sx ;
                                             next.y=sy ;
                                             if(s[sx][sy]=='T')
                                                 return next.bu ;
                                             s[sx][sy]='*' ;
                                             q.push(next) ;
                                  }
                                else {
                                          next.x=current.x ;
                                          next.y=current.y ;
                                          q.push(next) ;
                                     }
                           }
                          else if(s[next.x][next.y]=='.')
                                    {
                                        s[next.x][next.y]='*' ;
                                        q.push(next) ;
                                    }
                          else if(s[next.x][next.y]=='T')
                                    return next.bu ;
                       }
                 }
         }
    return -1 ;
}
int main()
{
    int i,j,ax,ay ;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<n;i++)
         {
             scanf("%s",s[i]) ;
             for(j=0;j<m;j++)
               if(s[i][j]=='S')
                  {
                      ax=i ;
                      ay=j ;
                  }
         }
        printf("%d\n",bfs(ax,ay)) ;
    }
     return 0 ;
}

 

抱歉!评论已关闭.