zoukankan      html  css  js  c++  java
  • [ZOJ

    水题不多说。上代码

    /*这题主要是因为文件数一定是1到n,不具有普遍性
    不过成环判定确实巧妙,先将输入按数组存好,
    之后在查找的时候交换行列,将列变为未知量一个个查找
    若数字未被使用过则标记为1(使用过)
    之后将找到的数字作为前面的数传入寻找与它相连的数,若找到了但被用过了即代表循环了
    就变成了寻找是否有数字相连且是否被标记过(循环)
    vis数组代表的是有没有数组与它相连过*/
    
    
    
    #include<stdio.h>
    #include<string.h>
    #define M 107
    
    int g[M][M],vis[M],flag,n;
    void dfs(int u)
    {
        for(int i=1;i<=n;i++)
        {
            if(!flag)
                return;
            else if(vis[i]&&g[u][i])
            {
                flag=0;
                return;
            }
            else if(g[u][i])
            {
                vis[i]=1;
                dfs(i);
                vis[i]=0;
            }
        }
    }
    int main()
    {
        while(~scanf("%d",&n)&& n!=-1)
        {
    
            memset(vis,0,sizeof(vis));
            memset(g,0,sizeof(g));
            int u,v;
            flag=1;
            for(int i=1;i<=n;i++)
            {
                scanf("%d%d",&u,&v);
                if(u!=v)//如果不加,会WA,已验证
                    g[u][v]=1;
            }
    
            int in;
    
            scanf("%d",&in);
            vis[in]=1;
            dfs(in);
            if(flag)
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    NOIP模拟测试17
    C++11下的关键字
    Tyvj 1518 CPU监控(线段树)
    单身三连之三
    论求解线性方程
    单身三连之二
    单身三连之一
    20190719总结
    卡常
    论突变为零(不定更新)
  • 原文地址:https://www.cnblogs.com/Vikyanite/p/11382458.html
Copyright © 2011-2022 走看看