HDU_2579_Dating with girls(2) (DFS)

Dating with girls(2)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2229    Accepted Submission(s): 638

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

Source

HDU 2009-5 Programming Contest

分析:这道题貌似被我搁置了很久没有理,回想了一下原因好像是因为当时wa了n发还是过不了但是觉得自己的方法没什么问题。现在重新看这个题目感觉没有一点印象了。

总体来说这个题目就是在一般的宽搜上多了一点就是墙壁会周期性(k)地消失,所以可以在标记数组增加一维,来表示step%k,因为在同一点余数不同,影响也不同。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2579代码清单:

#include<map>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAX = 105 ;

struct edge{ int x,y,step; };
int xy[4][2]={{0,-1},{-1,0},{0,1},{1,0}};
int T,r,c,k,sx,sy,ex,ey;
char str[MAX][MAX];
int vis[MAX][MAX][15];

bool check(edge v){
    if(v.x>=0&&v.x<r&&v.y>=0&&v.y<c&&!vis[v.x][v.y][v.step%k]){
        if(str[v.x][v.y]!='#')
            return true;
        if(str[v.x][v.y]=='#'&&v.step%k==0)
            return true;
    }
    return false;
}

void bfs(){
    queue<edge>q;
    while(q.size()) q.pop();
    memset(vis,0,sizeof(vis));
    edge p,w;
    p.x=sx;p.y=sy;p.step=0;
    vis[p.x][p.y][p.step%k]=1;
    q.push(p);
    while(q.size()){
        p=q.front();q.pop();
        if(p.x==ex&&p.y==ey){
            printf("%d\n",p.step);
            return ;
        }
        for(int i=0;i<4;i++){
            w.x=p.x+xy[i][0];
            w.y=p.y+xy[i][1];
            w.step=p.step+1;
            if(check(w)){
                vis[w.x][w.y][w.step%k]=1;
                q.push(w);
            }
        }
    }
    printf("Please give me another chance!\n");
}

int main(){
    scanf("%d",&T);
    while(T--){
        scanf("%d%d%d",&r,&c,&k);
        for(int i=0;i<r;i++){
            scanf("%s",str[i]);
            for(int j=0;j<c;j++){
                if(str[i][j]=='Y'){ sx=i;sy=j; }
                if(str[i][j]=='G'){ ex=i;ey=j; }
            }
        }
        bfs();
    }return 0;
}
时间: 2024-10-06 03:42:45

HDU_2579_Dating with girls(2) (DFS)的相关文章

HDU2579--Dating with girls(2)--(DFS, 判重)

Dating with girls(2) Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1418    Accepted Submission(s): 393 Problem Description If you have solved the problem Dating with girls(1).I think you can

Girls and Boys(匈牙利)

Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9245    Accepted Submission(s): 4240 Problem Description the second year of the university somebody started a study on the romant

POJ Girls and Boys (最大独立点集)

Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 12192   Accepted: 5454 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically in

HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)

HDU 1068 :题目链接 题意:一些男孩和女孩,给出一些人物关系,然后问能找到最多有多少个人都互不认识. 转换一下:就是大家都不认识的人,即最大独立集合 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <math.h> #define init(a) memset(a,

POJ 1466 Girls and Boys (匈牙利算法 最大独立集)

Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10912   Accepted: 4887 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically in

POJ 1466 Girls and Boys

Girls and Boys Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=1466 Description In the second year of the university somebody started a study on the romantic relations between the students. The relation "romantically involved&q

POJ 1466 Girls and Boys 求最大独立点集

最大独立点集 = 点数 - 最大匹配数 注意这题因为是两两匹配,A匹配B B匹配A算两个,所以最大匹配数要除以2 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #in

二分图基础--Girls and Boys

二分图模板,剩下的就是建图的过程. int dfs(int a) { int i; for(i=0;i<n;i++) { if(!vis[i]&&mapp[a][i]) { vis[i] = 1; if(dis[i]==-1||dfs(dis[i])) { dis[i] = a; return 1; } } } return 0; } 题目的完整代码. #include <iostream> #include <stdio.h> #include <st

POJ 1466 Girls and Boys(二分图匹配+拆点+最大独立集)

POJ 1466 Girls and Boys 题目链接 题意:n个人,每个人有一个爱慕的集合,现在要挑出一些人,使得集合中没有人两两爱慕,问这个集合最大人数是多少 思路:每个人拆成两点,爱慕和被爱慕,然后建图,跑二分图最大匹配,由于爱慕关系是相互的,所以匹配数会多2倍,然后人数n - 最大匹配数 / 2就是最大独立集 代码: #include <cstdio> #include <cstring> #include <vector> #include <algo