• HDU4324——DFS——Triangle LOVE


    http://acm.hdu.edu.cn/showproblem.php?pid=4324

    /*
    搜索一个三角形,用vector+vis来减少复杂度
    */
    /************************************************
    * Author        :Powatr
    * Created Time  :2015-8-25 10:42:01
    * File Name     :E.cpp
     ************************************************/
    
    #include <cstdio>
    #include <algorithm>
    #include <iostream>
    #include <sstream>
    #include <cstring>
    #include <cmath>
    #include <string>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <stack>
    #include <list>
    #include <map>
    #include <set>
    #include <bitset>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    
    #define lson l, mid, rt << 1
    #define rson mid + 1, r, rt << 1 | 1
    typedef long long ll;
    const int MAXN = 2000 + 10;
    const int INF = 0x3f3f3f3f;
    const int MOD = 1e9 + 7;
    
    char  mp[MAXN][MAXN];
    int vis[MAXN][MAXN];
    int n;
    vector<int> G[MAXN];
    bool dfs(int x, int y, int step, int ex, int ey)
    {
        if(step == 2 && y == ex) return true;
        if(vis[x][y]) return false;
        vis[x][y] = 1;
        if(step >= 2) return false;
        for(int i = 0; i < G[y].size(); i++){
            int v = G[y][i];
           // printf("%d %d
    ", y, v);
               if(!dfs(y, v, step + 1, ex, ey));
               else return true;
        }
        return false;
    }
    
    bool solve()
    {
        for(int i = 1; i <= n; i++)
            for(int j = 0; j < G[i].size(); j++){
                int v = G[i][j];
                if(!vis[i][v])
                    if(dfs(i, v, 0, i, v)){
                        return true;
                    }
                }
        return false;
    }
    
    int main(){
        int T;
        scanf("%d", &T);
        for(int cas = 1; cas <= T; cas++){
            memset(vis, 0, sizeof(vis));
            scanf("%d", &n);
            for(int i = 0; i <= n; i++)
                G[i].clear();
            for(int i = 1; i <= n; i++)
                scanf("%s", mp[i] + 1); 
            for(int i = 1; i <= n; i++){
                for(int j = 1; j <= n; j++){
                    if(mp[i][j] == '1'){
                        G[i].push_back(j);
                    }
                }
            }
            printf("Case #%d: ", cas);
            if(solve()) puts("Yes");
            else puts("No");
        }
        return 0;
    }
    

      

  • 相关阅读:
    梯度下降_机器学习-李宏毅
    LeTex算法伪代码环境
    数据结构之线性表
    Java中的初始化块、构造器、静态初始化块的执行顺序
    Java中的内省(introspector)
    JSP (Java Server Page)
    eclipse的web工程默认部署到了哪里
    Persistence机制(永久保存/序列化Serialize)
    VC++中使用正则表达式RegExp
    Java中解析和生成xml
  • 原文地址:https://www.cnblogs.com/zero-begin/p/4757540.html
Copyright © 2020-2023  润新知