zoukankan      html  css  js  c++  java
  • hdu1072(bfs)

    #include<iostream>
    #include<queue>
    #include<cstring>
    using namespace std;
    int a[10][10];
    int state_time[10][10];
    int f[4][2]={0,1,0,-1,1,0,-1,0};
    struct state
    {
        int x,y;
        int time;
        int count;
    };
    int main()
    {
        int t,n,m;
        cin>>t;
        while(t--)
        {
           memset(state_time,-1,sizeof(state_time));
           memset(a,0,sizeof(a));
           cin>>n>>m;
           int sx,sy;
           int min=99909990;
           for(int i=0;i<n;i++)
             for(int j=0;j<m;j++)
                  {
                      cin>>a[i][j];
                      if(a[i][j]==2)
                      {sx=i;sy=j;}
                     // if(a[i][j]==3)
                      //{ lx=i;ly=j;}
                  }
            state start;
            start.x=sx;start.y=sy;start.count=0;start.time=6;
            queue<state>q;
            q.push(start);
            while(!q.empty())
            {
                state cur=q.front();q.pop();
                if(state_time[cur.x][cur.y]>=cur.time)continue;
                //cout<<cur.x<<" "<<cur.y<<endl;
                if(state_time[cur.x][cur.y]<cur.time)
                {state_time[cur.x][cur.y]=cur.time;}
    
                if(cur.time==0)continue;
                if(a[cur.x][cur.y]==3)
                {
                    if(cur.count<min)min=cur.count;
                    continue;
                }
                if(a[cur.x][cur.y]==4)
                {
                    cur.time=6;
                }
                for(int i=0;i<4;i++)
                {
                    state zijiedian(cur);
                    zijiedian.count++;
                    zijiedian.time--;
                    zijiedian.x+=f[i][0];
                    zijiedian.y+=f[i][1];
                    if(a[zijiedian.x][zijiedian.y]==0)continue;
                    q.push(zijiedian);
                }
            }
            if(min==99909990)cout<<-1<<endl;
            else cout<<min<<endl;
    
        }
        return 0;
    }
    

  • 相关阅读:
    函数与导数部分的题型梳理
    构造函数习题1
    破解构造函数问题
    函数的值域
    函数的定义域
    高三数学微课堂
    Redux Todos Example
    Linux下查看Nginx安装目录、版本号信息及当前运行的配置文件
    antd的Tree控件实现点击展开功能
    Redux Counter example
  • 原文地址:https://www.cnblogs.com/yezekun/p/3925761.html
Copyright © 2011-2022 走看看