zoukankan      html  css  js  c++  java
  • 【POJ 2044】 Weather Forecast

    【题目链接】

                http://poj.org/problem?id=2044

    【算法】

               广度优先搜索

    【代码】

               

    #include <algorithm>  
    #include <bitset>  
    #include <cctype>  
    #include <cerrno>  
    #include <clocale>  
    #include <cmath>  
    #include <complex>  
    #include <cstdio>  
    #include <cstdlib>  
    #include <cstring>  
    #include <ctime>  
    #include <deque>  
    #include <exception>  
    #include <fstream>  
    #include <functional>  
    #include <limits>  
    #include <list>  
    #include <map>  
    #include <iomanip>  
    #include <ios>  
    #include <iosfwd>  
    #include <iostream>  
    #include <istream>  
    #include <ostream>  
    #include <queue>  
    #include <set>  
    #include <sstream>  
    #include <stdexcept>  
    #include <streambuf>  
    #include <string>  
    #include <utility>  
    #include <vector>  
    #include <cwchar>  
    #include <cwctype>  
    #include <stack>  
    #include <limits.h> 
    using namespace std;
    #define MAXN 400
    const int dx[9] = {0,-1,-2,0,0,1,2,0,0};
    const int dy[9] = {0,0,0,-1,-2,0,0,1,2};
    
    int i,j,k,n;
    int a[MAXN][5][5];
    bool visited[5][5][MAXN][7][7][7][7];
    
    struct info
    {
            int x,y,day;
            int s1,s2,s3,s4;        
    };
    inline bool check(int x,int y,int day,int s1,int s2,int s3,int s4)
    {
            if (x <= 0 || x > 3 || y <= 0 || y > 3) return false;
            if (a[day][x][y] == 1) return false;
            if (a[day][x][y+1] == 1) return false;
            if (a[day][x+1][y] == 1) return false;
            if (a[day][x+1][y+1] == 1) return false;
            if (s1 >= 7 || s2 >= 7 || s3 >= 7 || s4 >= 7) return false;
            return true;        
    }
    inline bool bfs()
    {
            int i,sa,sb,sc,sd,tx,ty;
            queue< info > q;
            info cur;
            if (a[1][2][2] || a[1][2][3] || a[1][3][2] || a[1][3][3]) return false; 
            memset(visited,false,sizeof(visited));
            while (!q.empty()) q.pop();        
            q.push((info){2,2,1,1,1,1,1});
            visited[2][2][1][1][1][1][1] = true;
            while (!q.empty()) 
            {
                    cur = q.front();
                    q.pop();
                    if (cur.day == n) return true;
                    for (i = 0; i < 9; i++)
                    {
                            tx = cur.x + dx[i];
                            ty = cur.y + dy[i];
                            sa = cur.s1 + 1;
                            sb = cur.s2 + 1;
                            sc = cur.s3 + 1;
                            sd = cur.s4 + 1;
                            if (tx == 1 && ty == 1) sa = 0;
                            if (tx == 1 && ty == 3) sb = 0;
                            if (tx == 3 && ty == 1) sc = 0;
                            if (tx == 3 && ty == 3) sd = 0;
                            if (check(tx,ty,cur.day+1,sa,sb,sc,sd) && !visited[tx][ty][cur.day+1][sa][sb][sc][sd])
                            {
                                    q.push((info){tx,ty,cur.day+1,sa,sb,sc,sd});
                                    visited[tx][ty][cur.day+1][sa][sb][sc][sd] = true;
                            }
                    }
            }
            return false;
    }
    
    int main() 
    {
            
            while (scanf("%d",&n) != EOF && n)
            {
                    for (i = 1; i <= n; i++)
                    {
                            for (j = 1; j <= 4; j++)
                            {
                                    for (k = 1; k <= 4; k++)
                                    {
                                            scanf("%d",&a[i][j][k]);
                                    }
                            }        
                    }        
                    if (bfs()) printf("%d
    ",1);
                    else printf("%d
    ",0);
            }
            
            return 0;
        
    }
  • 相关阅读:
    finalshell连接工具
    oracle11g R2数据库的迁移(同windows系统迁移)使用RMAN
    《python可以这样学》第一章
    python环境开发
    HTTP下帐号密码的截取
    Kail Linux下载与安装
    查看Linux系统内存、CPU、磁盘使用率和详细信息
    内网获取目标的浏览过的所有图片
    修改kali软件源并配置网络
    Python迭代器与生成器
  • 原文地址:https://www.cnblogs.com/evenbao/p/9277169.html
Copyright © 2011-2022 走看看