zoukankan      html  css  js  c++  java
  • 2016暑假集训补题系列——HDU 2579

    HDU 2579 Dating with girls(2) (BFS)

    题意:就是一个正常的迷宫,只不过这次石头会每个K步消失一次,即使当时间为K的倍数是,石头就会消失,其他时间又会存在。

    思路:在标记时多标记一维,即使该次走后的步数模上K,当为0时石头的部分就可以走,其他情况就不可以走。

    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cstring>
    using namespace std;
    struct node{
        int x,y,p,step;
        node(int a,int b,int c,int d){
            x=a; y=b; p=c; step=d;
        }
    };
    char s[105][105];
    int vis[105][105][15];
    int k,n,m,sx,sy,ex,ey;
    int fx[]={-1,1,0,0};
    int fy[]={0,0,-1,1};
    bool in(int x,int y) { return x>=0&&y>=0&&x<n&&y<m; }
    void bfs(){
        memset(vis,0,sizeof(vis));
        queue<node> q;
        q.push(node(sx,sy,0,0));
        vis[sx][sy][0]=1;
        while(!q.empty()){
            node u=q.front();
            q.pop();
            //printf("%d %d %d %d
    ",u.x,u.y,u.p,u.step);
            //system("pause");
            if(u.x==ex&&u.y==ey){
                printf("%d
    ",u.step);
                return;
            }
            for(int i=0;i<4;i++){
                int xx=u.x+fx[i];
                int yy=u.y+fy[i];
                int pp=(u.p+1)%k;
                int _step=u.step+1;
                if(!in(xx,yy)) continue;
                if(vis[xx][yy][pp]) continue;
                if(s[xx][yy]!='#'){
                    vis[xx][yy][pp]=1;
                    q.push(node(xx,yy,pp,_step));
                }
                else  if(s[xx][yy]=='#'&&pp==0){
                    vis[xx][yy][pp]=1;
                    q.push(node(xx,yy,pp,_step));
                }
            }
        }
        printf("Please give me another chance!
    ");
    }
    int main(){
        int t; scanf("%d",&t);
        while(t--){
            scanf("%d%d%d",&n,&m,&k);
            for(int i=0;i<n;i++)
                scanf("%s",&s[i]);
            for(int i=0;i<n;i++)
            for(int j=0;j<m;j++){
                if(s[i][j]=='Y'){
                    sx=i; sy=j;
                }
                if(s[i][j]=='G'){
                    ex=i; ey=j;
                }
            }
            bfs();
        }
    
        return 0;
    }
    Psong
  • 相关阅读:
    326. Power of Three
    python实现Excel删除特定行、拷贝指定行操作
    283. Move Zeroes
    268. Missing Number
    263. Ugly Number
    258. Add Digits
    257. Binary Tree Paths
    二叉树的创建,递归前序、中序、后序遍历以及队列实现层遍历
    242. Valid Anagram
    237. Delete Node in a Linked List
  • 原文地址:https://www.cnblogs.com/N-Psong/p/5784594.html
Copyright © 2011-2022 走看看