hdu2579: Dating with girls(2)

hdu2579: http://acm.hdu.edu.cn/showproblem.php?pid=2579
题意:“#”代表石头,如果走的步数是k的倍数,石头会消失,求最小时间(步数)
code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
const int inf=1<<29;
char v[150][150];
int q[150*150*150][2],dist[150][150][20];
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
int main()
{
    int i,j,z,rear,front,t,r,c,k,start,gi,gj,u,w,x,y,nx,ny,time;
    scanf("%d",&t);
    while(t--)
    {
        for(i=0;i<150;i++)
            for(j=0;j<150;j++)
                for(z=0;z<20;z++)
                    dist[i][j][z]=inf;
        scanf("%d%d%d",&r,&c,&k);
        getchar();
        for(i=0;i<r;i++)
        {
            gets(v[i]);
            for(j=0;j<c;j++)
            {
                if(v[i][j]=='Y')
                {
                    start=i*c+j;
                    dist[i][j][0]=0;
                }
                if(v[i][j]=='G')
                {
                    gi=i;gj=j;
                }
            }
        }
        rear=0;front=0;
        q[rear++][0]=start;q[rear-1][1]=0;
        while(front<rear)
        {
            u=q[front++][0];
            x=u/c;y=u%c;time=q[front-1][1];        
            for(i=0;i<4;i++)
            {
                nx=x+dx[i];ny=y+dy[i];
                if(nx>=0&&nx<r&&ny>=0&&ny<c&&(((time+1)%k==0)&&(v[nx][ny]=='#')||v[nx][ny]!='#'))
                {
                    if(dist[nx][ny][(time+1)%k]>dist[x][y][time%k]+1)
                    {
                        dist[nx][ny][(time+1)%k]=dist[x][y][time%k]+1;
                        w=nx*c+ny;
                        q[rear++][0]=w;
                        q[rear-1][1]=(time+1)%k;
                    }
                }
            }
        }
        int min=inf;
        for(i=0;i<20;i++)
            if(dist[gi][gj][i]<min)
                min=dist[gi][gj][i];
        if(min==inf)
            printf("Please give me another chance!\n");
        else
            printf("%d\n",min);
    }
}
/*
input:
1
6 6 2
...Y..
...#..
.#....
...#..
...#..
..#G#.
output:
7
*/

posted on 2012-07-26 12:10  acmer-jun  阅读(162)  评论(0编辑  收藏  举报

导航