• 6-5 巡逻机器人 uva1600


    一开始按照标准bfs来写  标记为二维数组

    后来按照三维数组写过了    ps大部分bfs都不会是二维数组搞定!!!

    其中有一个bug弄了半个小时。。。

    一开始我是先判断!vis【x】【y】【v.c】 再判断方块是否为1  是的话v.c++;否的话归零  

    但是 这并不科学   到另外一个方块的时候    如果数组下标内容和结构体有关的话  应该先改变状态再判断   就如同肯定是先在u的基础上改变dx dy  再判断v.x v.y  一个道理  不然会超时!因为头不对尾

    #include<bits/stdc++.h>
    using namespace std;
    
    int m1[25][25];int n,m,chance;
    bool vis[25][25][25];
    int dx[4]={0,1,0,-1};
    int dy[4]={1,0,-1,0};
    struct  node
    {
        int x,y,d,c;
        node(int x=0,int y=0,int d=0,int c=0):x(x),y(y),d(d),c(c){}
    };
    
    bool inmap(int x,int y)
    {
        if(x>=1&&x<=n&&y>=1&&y<=m)return true;
        return false;
    
    }
    
    void bfs()
    {   memset(vis,false,sizeof(vis));
        node u(1,1,0,0);
        queue<node>q;
        q.push(u);
        vis[1][1][0]=true;
        while(!q.empty())
        {
           u=q.front();q.pop();
    
           if(u.x==n&&u.y==m){printf("%d
    ",u.d);return;}
           for(int i=0;i<4;i++)
           {
               node v(u.x+dx[i],u.y+dy[i],u.d+1,u.c);
    
    
               if(m1[v.x][v.y])
                v.c++;
               else v.c=0;
               if(v.c<=chance&&!vis[v.x][v.y][v.c]&&inmap(v.x,v.y))
               {
                   vis[v.x][v.y][v.c]=true;
    
                   q.push(v);
    
               }
    
           }
        }
        printf("-1
    ");
        return ;
    
    }
    
    int main()
    {
        int cas;cin>>cas;
        while(cas--)
        {
            scanf("%d %d %d",&n,&m,&chance);
            for(int i=1;i<=n;i++)
                for(int j=1;j<=m;j++)
                  scanf("%d",&m1[i][j]);
    
             bfs();
    
        }
    
    }
    View Code
  • 相关阅读:
    保护个人劳动成果----------代码混淆 (war/jar)
    获取计算机所有属性硬件信息
    得到某个文件夹下所有的文件名称
    下载的方法
    shell停止/启动/重启tomcat
    线程超时
    2020 0508 开通博客
    spring mvc 的一些状态码
    restful接口设计规范总结 转发的 第一次接触时候发现的文章(个人觉得不错)
    spring mvc常用注解
  • 原文地址:https://www.cnblogs.com/bxd123/p/10317740.html
Copyright © 2020-2023  润新知