zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    [HNOI2015]实验比较 树形dp+组合数学
    【bzoj1090】 [SCOI2003]字符串折叠
    hdu4514(非连通图的环判断与图中最长链)(树的直径)
    数据类型进阶 续1
    数据类型进阶
    二进制补码
    基本数据类型的包装类
    变量的作用域
    用变量保存多种类型的数据
    用变量简化计算
  • 原文地址:https://www.cnblogs.com/bxd123/p/10317740.html
Copyright © 2011-2022 走看看