zoukankan      html  css  js  c++  java
  • hdu 2579 BFS

    http://acm.hdu.edu.cn/showproblem.php?pid=2579

    题目大意:给定 r * c 的迷宫,还有一个整数 k 。迷宫中“.”表示可以走,“#”表示墙,当时间为k的倍数时,这些墙会消失。求从起点“Y”到终点“G”的最短时间。(人不能呆在一点不动)。

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<queue>
    #include<algorithm>
    #define N 105
    using namespace std;
    char map[N][N];
    int step[N][N][10];//多加一维,记录(time%k)
    int r,c,k,x_s,y_s,x_e,y_e;
    int dir[4][2]={0,1,0,-1,1,0,-1,0};
    struct node
    {
    	int x,y,mod;
    };
    int BFS()
    {
    	int i;
    	queue<node>q;
    	node now,next;
    	now.x=x_s;
    	now.y=y_s;
    	now.mod=0;
    	memset(step,-1,sizeof(step));
    	step[now.x][now.y][now.mod]=0;
    	q.push(now);
    	while(!q.empty()){
    		now=q.front();
    		q.pop();
    		if(now.x==x_e && now.y==y_e) return step[now.x][now.y][now.mod];
    		for(i=0;i<4;i++){
    			next.x=now.x+dir[i][0];
    			next.y=now.y+dir[i][1];
    			next.mod=(now.mod+1)%k;
    			if(next.x<0 || next.x>=r || next.y<0 ||next.y>=c) continue;
    			if(step[next.x][next.y][next.mod]!=-1)            continue;
    			if(map[next.x][next.y]=='#' && next.mod!=0)       continue;
    			step[next.x][next.y][next.mod]=step[now.x][now.y][now.mod]+1;
    			q.push(next);
    		}
    	}
    	return -1;
    }
    int main()
    {
    	int T,i,j,ans;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d%d%d",&r,&c,&k);
    		for(i=0;i<r;i++){
    			scanf("%s",map[i]);
    			for(j=0;map[i][j];j++){
    				if(map[i][j]=='Y'){
    					x_s=i;y_s=j;map[i][j]='.';
    				}
    				if(map[i][j]=='G'){
    					x_e=i;y_e=j;map[i][j]='.';
    				}
    			}
    		}
    		ans=BFS();
    		if(ans==-1) printf("Please give me another chance!\n");
    		else printf("%d\n",ans);
    	}
    	return 0;
    }


  • 相关阅读:
    【leetcode】1415. The k-th Lexicographical String of All Happy Strings of Length n
    【leetcode】1413. Minimum Value to Get Positive Step by Step Sum
    【leetcode】1410. HTML Entity Parser
    【leetcode】1409. Queries on a Permutation With Key
    1, 2, and 4 symbols per clock中数据排列
    RGB转换成YCbCr
    RAW转换成RGB
    ROM的一种写法
    IP之ALTIOBUF仿真
    IP之ALTDDIO_in仿真
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3072133.html
Copyright © 2011-2022 走看看