zoukankan      html  css  js  c++  java
  • 绿纹龙的森林游记——UPC

    题目描述
    暑假来了,绿纹龙很高兴。于是飘飘乎就来到了森林一日游。
    可是他却看到了很不和谐的一幕,一群猎人在森林里围捕小动物。
    森林可以看做是一个10*10的方格,如下图所示,1表示猎人,0表示小动物。

    在这里插入图片描述
    已知猎人保持不动,而小动物可以往上下左右任意方向逃脱(当然不能撞上猎人)。小动物可以逃出森林。但上图背景色被标红的那部分小动物将永远无法逃脱猎人的魔爪。
    输入
    一个10*10的矩阵,描述森林中猎人和小动物分布的情况。保证每个点要么为猎人,要么为小动物。
    输出
    一个整数,表示不能逃脱猎人魔爪的小动物数量。
    样例输入 Copy

    0 0 0 0 0 0 0 0 0 0
    0 0 0 0 1 1 1 0 0 0
    0 0 0 0 1 0 0 1 0 0
    0 0 0 0 0 1 0 0 1 0
    0 0 1 0 0 0 1 0 1 0
    0 1 0 1 0 1 0 0 1 0
    0 1 0 0 1 1 0 1 1 0
    0 0 1 0 0 0 0 1 0 0
    0 0 0 1 1 1 1 1 0 0
    0 0 0 0 0 0 0 0 0 0
    

    样例输出 Copy
    15

    写dfs进行搜索

    #pragma GCC optimize("Ofast,unroll-loops,no-stack-protector,fast-math")
    #pragma GCC optimize("Ofast")
    #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    #pragma comment(linker, "/stack:200000000")
    #pragma GCC optimize (2)
    #pragma G++ optimize (2)
    #include <bits/stdc++.h>
    #include <algorithm>
    #include <map>
    #include <queue>
    #include <set>
    #include <stack>
    #include <string>
    #include <vector>
    using namespace std;
    #define wuyt main
    typedef long long ll;
    #define HEAP(...) priority_queue<__VA_ARGS__ >
    #define heap(...) priority_queue<__VA_ARGS__,vector<__VA_ARGS__ >,greater<__VA_ARGS__ > >
    template<class T> inline T min(T &x,const T &y){return x>y?y:x;}
    template<class T> inline T max(T &x,const T &y){return x<y?y:x;}
    ll read(){ll c = getchar(),Nig = 1,x = 0;while(!isdigit(c) && c!='-')c = getchar();
    if(c == '-')Nig = -1,c = getchar();
    while(isdigit(c))x = ((x<<1) + (x<<3)) + (c^'0'),c = getchar();
    return Nig*x;}
    #define read read()
    const ll inf = 1e15;
    const int maxn = 1e6 + 7;
    const int mod = 1e9 + 7;
    ///ll n,m,k,x;
    /**
    ll superpow(ll a,ll b){
        ll ans=1;
        while (a>0)
        {
            if (a%2) ans=ans*b%n;
            b=b%n*b%n;
            a/=2;
        }
        return ans;
    }
    ll n,x;**/
    ll num[maxn];///num2[maxn];
    ll searc[100][100];
    void dfs(int a,int b){
        if(a>=1&&a<=10&&b>=1&&b<=10&&!searc[a][b]){
            searc[a][b]=1;
            dfs(a+1,b);dfs(a-1,b);
            dfs(a,b+1);dfs(a,b-1);
        }
        return ;
    }
    int main(){
        for(int i=1;i<=10;i++)
            for(int j=1;j<=10;j++)
                searc[i][j]=read;
        for(int i=1;i<=10;i++){
            dfs(1,i);dfs(i,1);dfs(10,i);dfs(i,10);
        }
        ll ans=0;
        for(int i=1;i<=10;i++)
            for(int j=1;j<=10;j++)
                if(!searc[i][j])
                    ans++;
        cout<<ans<<endl;
        return 0;
    }
    
    
  • 相关阅读:
    【BZOJ】4349: 最小树形图
    【AtCoder】AtCoder Petrozavodsk Contest 001
    【LOJ】#2525. 「HAOI2018」字串覆盖
    趣味题:恺撒Caesar密码(c++实现)
    趣味问题:画图(c++实现)
    趣味问题:到底买不买
    成绩大排队
    A除以B问题
    2017-统计字符个数
    2016-数据的交换输出
  • 原文地址:https://www.cnblogs.com/PushyTao/p/13144164.html
Copyright © 2011-2022 走看看