Dating with girls(2)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2705    Accepted Submission(s):
759

Problem Description
If you have solved the problem Dating with girls(1).I
think you can solve this problem too.This problem is also about dating with
girls. Now you are in a maze and the girl you want to date with is also in the
maze.If you can find the girl, then you can date with the girl.Else the girl
will date with other boys. What a pity!
The Maze is very strange. There are
many stones in the maze. The stone will disappear at time t if t is a multiple
of k(2<= k <= 10), on the other time , stones will be still there.

There are only ‘.’ or ‘#’, ’Y’, ’G’ on the map of the maze. ’.’ indicates
the blank which you can move on, ‘#’ indicates stones. ’Y’ indicates the your
location. ‘G’ indicates the girl's location . There is only one ‘Y’ and one ‘G’.
Every seconds you can move left, right, up or down.
 
Input
The first line contain an integer T. Then T cases
followed. Each case begins with three integers r and c (1 <= r , c <=
100), and k(2 <=k <= 10).
The next r line is the map’s
description.
 
Output
For each cases, if you can find the girl, output the
least time in seconds, else output "Please give me another chance!".
 
Sample Input
1
6 6 2
 ...Y..    
 ...#..
.#....
...#..
...#..
..#G#.
 
Sample Output
7
 

题意:给一个迷宫Y是起点,G是终点,#是石头不能通过 .是路可以走,但是当走到的步数step%k==0时#全部变为路可以通过,问从起点到终点的最少步数

题解:此题不用标记走过的路,但要避免走的路径重复走,同一个路径只在同一个时刻走过(当再次走到这个点且step%k刚好再次与此时相同时 不可以走),用一个三维数组标记

从起点到终点,bfs,不同的是对于图中的点,可能走多次,分别是在不同的时刻。
vis[ t%k ][ i ][ j ]=1:表示坐标( i,j )在 t %k 时刻走过,接下来再出现 t%k 就不用再走一次了。

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
#define MAX 110
#define INF 0x7ffff
using namespace std;
int n,m,k;
char map[MAX][MAX];
int vis[MAX][MAX][MAX];
int b,e;
struct node
{
int x,y;
int step;
friend bool operator <(node a,node b)
{
return a.step>b.step;
}
};
int judge(int a,int b)
{
if(a<0||a>=n||b<0||b>=m)
return 0;
return 1;
}
void bfs()
{
int move[4][2]={1,0,-1,0,0,1,0,-1};
node beg,end;
priority_queue<node>q;
while(!q.empty())
q.pop();
memset(vis,0,sizeof(vis));
beg.x=b;
beg.y=e;
beg.step=0;
vis[0][b][e]=1;
q.push(beg);
while(!q.empty())
{
end=q.top();
q.pop();
if(map[end.x][end.y]=='G')
{
printf("%d\n",end.step);
return ;
}
for(int i=0;i<4;i++)
{
beg.x=end.x+move[i][0];
beg.y=end.y+move[i][1];
if(judge(beg.x,beg.y))
{
if(map[beg.x][beg.y]!='#')
{
beg.step=end.step+1;
if(!vis[beg.step%k][beg.x][beg.y])
{
vis[beg.step%k][beg.x][beg.y]=1;
q.push(beg);
}
}
else
{
beg.step=end.step+1;
if(!vis[beg.step%k][beg.x][beg.y]&&beg.step%k==0)
{
vis[beg.step%k][beg.x][beg.y]=1;
q.push(beg);
}
}
}
}
}
printf("Please give me another chance!\n");
}
int main()
{
int t,i,j;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++)
scanf("%s",map[i]);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(map[i][j]=='Y')
{
b=i;
e=j;
}
}
}
bfs();
}
return 0;
}

  

hdoj 2579 Dating with girls(2)【三重数组标记去重】的更多相关文章

  1. hdu 2579 Dating with girls(2)

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2579 Dating with girls(2) Description If you have sol ...

  2. hdu 2579 Dating with girls(2) (bfs)

    Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  3. 【HDOJ】2579 Dating with girls(2)

    简单BFS. /* 2579 */ #include <iostream> #include <queue> #include <cstdio> #include ...

  4. hdu 2578 Dating with girls(1) (hash)

    Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. HDU 2578 Dating with girls(1) [补7-26]

    Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  6. HDU 3784 继续xxx定律 & HDU 2578 Dating with girls(1)

    HDU 3784 继续xxx定律 HDU 2578 Dating with girls(1) 做3748之前要先做xxx定律  对于一个数n,如果是偶数,就把n砍掉一半:如果是奇数,把n变成 3*n+ ...

  7. hdu 2578 Dating with girls(1) 满足条件x+y=k的x,y有几组

    Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  8. hdu 2578 Dating with girls(1)

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2578 Dating with girls(1) Description Everyone in the ...

  9. Dating with girls(1)(二分+map+set)

    Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. 用python实现k近邻算法

    用python写程序真的好舒服. code: import numpy as np def read_data(filename): '''读取文本数据,格式:特征1 特征2 -- 类别''' f=o ...

  2. android 为组件添加contextMenu上下文菜单

    package com.example.fragmentNavigation2.fragment; import android.os.Bundle; import android.support.v ...

  3. [AC自动机]HDOJ3695 Computer Virus on Planet Pandora

    题意:给t.n,t个案例,n个字符串 下面给n+1个字符串,n个互不相同的小串,最后一个是模式串 模式串会出现[qx]的形式,q为数字,x为一个字母 问n个小串在模式串中出现的个数,正着出现.反着出现 ...

  4. Macbook配置adb环境

    配置adb命令 http://stackoverflow.com/questions/5526470/trying-to-add-adb-to-path-variable-osx http://sta ...

  5. Tomcat部署(转)

    首先说说tomcat的几种部署方法: 1.将应用文件夹或war文件塞到tomcat安装目录下的webapps子目录下,这样tomcat启动的时候会将webapps目录下的文件夹或war内容当成应用部署 ...

  6. 转:HTTP请求(GET、POST和soap区别)和响应

    一直对Http请求和SOAP请求不是太理解,只是知道SOAP是基于Http的,并且增加了很多XML标签,SOAP经常用在WebService中,比如在C#中创建一个WebService,然后在客户端生 ...

  7. 应付配置文件 Profile

    (N) System Administrator > Profile > System Profile Option Name Site Application Responsibilit ...

  8. Java之sleep和wait的区别

    这个问题在面试线程方面的知识时,基本上属于必问的问题.因此这里有必要做一个较为详细的总结. 区别一 首先需要明白的是这两个方法根本来自不同的类,sleep来自Thread,wait来自Object类. ...

  9. C#开发漂亮的数字时钟

    今天用C#做了一个漂亮的数字时钟.界面如下. 实现技术:主要是通过Graphics类的DrawImage方法来绘制数字时钟中所有的数字,这些数字是从网上找的一些图片文件.时钟使用DateTime中No ...

  10. $destroy

    ng-view 路由切换会触发 $destroy