HDU 1180题 诡异的楼梯

来源:互联网 发布:淘宝网发布商品怎么分 编辑:程序博客网 时间:2024/06/02 09:40

 题目链接~~>

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

代码:

#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 ;}


 

原创粉丝点击