HDU2612-Find a way

题目链接:HDU2612

这题目有个坑点很类似前面那个fire(UVA11624)。

先说思路,我一开始记录下每个KFC的位置,然后对每个KFC,跑Y和M的bfs 求最小时间 然后T了

我看了看网上的题解,正解是用Y和M 跑整个图,记录下跑每个点的时间。然后对于每个KFC直接算时间就好了

但是这要考虑一个特殊情况,特判,当前KFC两者必须都能够走到,(WA了好多次)

ACcode:

#include
#include
#include
using namespace std;
const int maxn=220;
bool vis[maxn][maxn];
char mp[maxn][maxn];
int n,m,sx,sy,ex,ey,tot;
int dis[3][maxn][maxn];
struct dot{
int x,y;
}kfc[maxn];

struct node{
    int x,y;
    int step;
};


int bfs(int x,int y,int id){
    queue q;
    memset(vis,false,sizeof(vis));
    node t1,t2,t3;
    t1.x=x;
    t1.y=y;
    t1.step=0;
    dis[id][x][y]=0;
    q.push(t1);
    vis[x][y]=1;
    while(!q.empty()){
        t2=q.front();
        q.pop();
        int cx=t2.x;
        int cy=t2.y;

        if(cx+1=0&&!vis[cx-1][cy]&&mp[cx-1][cy]!='#'){
            t3.x=cx-1;
            t3.y=cy;
            t3.step=t2.step+1;
            vis[cx-1][cy]=1;
            dis[id][t3.x][t3.y]=t3.step;
            q.push(t3);
        }
        if(cy+1=0&&!vis[cx][cy-1]&&mp[cx][cy-1]!='#'){
            t3.x=cx;
            t3.y=cy-1;
            t3.step=t2.step+1;
            vis[cx][cy-1]=1;
            dis[id][t3.x][t3.y]=t3.step;
            q.push(t3);
        }
    }
    return 0;
}

int main(){
   // freopen("n.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF){
        tot=0;
        memset(dis,0,sizeof(dis));
        for(int i=0;i

你可能感兴趣的:(kuangbin专题一,大三上学期训练,搜索入门,BFS)