zoukankan      html  css  js  c++  java
  • hdu 1072 Nightmare BFS搜索(可重走)

    二维图:
    0:墙
    1:路
    2:起点
    3:终点
    4:可重设炸弹定时器的地方,时间又重设为6。
    要在6个单位时间内从起点走到终点,不过当走到“ 4”时时间又可设为6;输出可行的最短步数。

    #include<stdio.h>
    #include<stdlib.h>
    #include<queue>
    #include<string.h>
    #include <iostream>
    using namespace std;
    int map[10][10],tim[10][10];
    int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
    int visited[10][10];
    int co,ro;
    struct coor
    {
        int x,y;
        int step;
    };
    queue<coor>que;
    bool judge(int x,int y)
    {
        if(x<0||y<0||x>=co||y>=ro||map[x][y]==0)
        return false;
        return true;
    }
    bool bfs(int a,int b)
    {
        int x,y,i;
        coor in,out;
        memset(visited,0,sizeof(visited));
        memset(tim,0,sizeof(tim));
        while(!que.empty())
        que.pop();
        in.x=a;
        in.y=b;
        in.step=0;
        tim[a][b]=6;
        que.push(in);
        while(!que.empty())
        {
            out=que.front();
            que.pop();
            if(map[out.x][out.y]==3)
            {
                printf("%d\n",out.step);
                return true;
            }
            if(tim[out.x][out.y]==1)
            continue;
            for(i=0;i<4;i++)
            {
                x=out.x+dir[i][0];
                y=out.y+dir[i][1];
                if(!judge(x,y))
                continue;
                if(tim[x][y]>=tim[out.x][out.y])
                continue;
                if(map[x][y]==4)
                tim[x][y]=6;
                else
                tim[x][y]=tim[out.x][out.y]-1;
                in.x=x;
                in.y=y;
                in.step=out.step+1;
                if(map[x][y]=='x')
                in.step++;
                que.push(in);
            }
        }
        return false;
    }
               
    int main()
    {
        int i,a,b,j,cas;
        scanf("%d",&cas);
        while(cas--)
        {
            scanf("%d%d",&co,&ro);
            for(i=0;i<co;i++)
            for(j=0;j<ro;j++)
            {
                scanf("%d",&map[i][j]);
                if(map[i][j]==2)
                {
                    a=i;
                    b=j;
                }
            }
           
            if(!bfs(a,b))
            printf("-1\n");
        }
        return 0;
    }
           
                       

  • 相关阅读:
    java 对象导论
    Centos7 中打开和关闭防火墙及端口
    logstash用jdbc插件将数据库内容导入elasticsearch时间字段相差5小时
    git本地库中配置多个sshkey
    elasticsearch报Fielddata is disabled on text fields by default
    centos7环境下安装nginx
    请问一下大佬们,我的项目compile编译的时候总是编译报错
    Elasticsearch安装head插件
    mysql配置主从同步
    centos7中提升用户权限
  • 原文地址:https://www.cnblogs.com/zxj015/p/2740267.html
Copyright © 2011-2022 走看看