hdu 4308 Saving Princess claire_ 广搜 多校联合赛第七题

来源:互联网 发布:淘宝是如何盈利的 编辑:程序博客网 时间:2024/06/05 17:21

一个广搜题,就多了一个p点的处理,我们在以起点为开始广搜 遇见第一个p时(这个p一定是理起点最近的点)再将多有的p点都爆搜出来,压入队列,然后正常广搜就ok啦!!

5000*10000貌似没有超int啊!!wa了一次,改成longlong过了,测试数据有问题???

#include<iostream>#include<cstdio>#include<queue>using namespace std;char a[5005][5005];long long map[5005][5005];int r,c,t,sx,sy,ex,ey,sum,sign;int dir[4][2]={1,0,0,1,-1,0,0,-1};void bfs(int x,int y){    queue<int> q;    q.push(x);    q.push(y);    while(!q.empty()){        int m=q.front();q.pop();        int n=q.front();q.pop();        for(int i=0;i<4;i++){            int mm=m+dir[i][1];            int nn=n+dir[i][0];            if(mm>=0&&mm<r&&nn>=0&&nn<c&&a[mm][nn]!='#'&&map[mm][nn]==0){                if(a[mm][nn]!='P'){                    if(a[mm][nn]=='*'){                        map[mm][nn]=map[m][n]+t;                        q.push(mm);                        q.push(nn);                    }                    if(a[mm][nn]=='C'){                        sign=1;//标记是否找到终点                        map[mm][nn]=map[m][n];                        return ;                    }                }                else if(a[mm][nn]=='P'){                    for(int i=0;i<r;i++){                        for(int j=0;j<c;j++){                            if(i==mm&&j==nn) continue;                            if(a[i][j]=='P'){//搜索所有p点,加入队列,                                a[i][j]='!';//防止第二次又搜到p点                                q.push(i);                                q.push(j);                                map[i][j]=map[m][n];                            }                        }                    }                }            }        }    }}int main(){    while(~scanf("%d%d%d",&r,&c,&t)){        for(int i=0;i<r;i++)            scanf("%s",a[i]);        for(int i=0;i<r;i++){            for(int j=0;j<c;j++){                map[i][j]=0;                if(a[i][j]=='Y'){                    sx=i;sy=j;                }                if(a[i][j]=='C'){                    ex=i;ey=j;                }            }        }        sign=0;        sum=0;        bfs(sx,sy);        if(sign==0) printf("Damn teoy!\n");        else cout<<map[ex][ey]<<endl;    }}


原创粉丝点击