hdoj 2579 Dating with girls(2)【三重数组标记去重】
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
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.
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.
least time in seconds, else output "Please give me another chance!".
题意:给一个迷宫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)【三重数组标记去重】的更多相关文章
- hdu 2579 Dating with girls(2)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2579 Dating with girls(2) Description If you have sol ...
- 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 ...
- 【HDOJ】2579 Dating with girls(2)
简单BFS. /* 2579 */ #include <iostream> #include <queue> #include <cstdio> #include ...
- 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 ...
- 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 ...
- 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+ ...
- 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 ...
- hdu 2578 Dating with girls(1)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2578 Dating with girls(1) Description Everyone in the ...
- Dating with girls(1)(二分+map+set)
Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
随机推荐
- Pair Project: Elevator Scheduler [电梯调度算法的实现和测试]:思考题——谢勤政11061197
第一题: 大楼里面的电梯一般分区域,或考虑思考题第四题的情况,运行楼层不一样的电梯属于不同的区域.然后在接口IRequest和IPassenger还有IElevator里面都加上int area这个属 ...
- [JavaScript] js判断是否在微信浏览器中打开
用JS来判断了,经过查找资料终于实现了效果, function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(u ...
- [转载]C#.NET中Dns类的常用方法及说明
IP是一种普遍应用于因特网.允许不同主机能够相互找到对方的寻址协议.IP地址由4个十进制的数字号码所组成,而每一个号码的值介于0~255之间,它虽然解决了网络上计算机的识别问题,但是IP地址确不容易记 ...
- HDU 1176 免费馅饼(DP)
点我看题目 题意 : 中文题.在直线上接馅饼,能接的最多是多少. 思路 :这个题其实以前做过.....你将这个接馅饼看成一个矩阵,也不能说是一个矩阵,反正就是一个行列俱全的形状,然后秒当行,坐标当列, ...
- Mysql的列索引和多列索引(联合索引)
转自:http://blog.chinaunix.net/uid-29305839-id-4257512.html 创建一个多列索引:CREATE TABLE test ( id ...
- HDU - 3594 Cactus
这是一个有向仙人掌的题目,要求判定给定的图是不是强连通图,而且每一条边只能出现在一个环中,这里有一个介绍有向仙人掌的文档:http://files.cnblogs.com/ambition/cactu ...
- 获取保存在沙盒中plist文件的用户的字典信息
获取保存在沙盒中plist文件的用户的字典信息
- Java异常处理之try-catch-finally
/** * @author Administrator * 功能:异常 */ package com.test; import java.io.*; import java.net.*; public ...
- AD设计中,三种大面积覆铜的区别
在AD设计中,主要有三种大面积覆铜方式,分别是Fill(铜皮) Polygon Pour(灌铜)和Plane(平面层),这三种方式刚开始的时候没有细细区分,现在分别应用了一下, 总结如下,欢迎指正 F ...
- 监控Nginx负载均衡器脚本
1.编写脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 vim nginx_pid.sh #!/bin/bash while : do nginxpid=`ps -C ...