zoukankan      html  css  js  c++  java
  • NYOJ42 一笔画问题

     

    一笔画问题

    时间限制:3000 ms  |  内存限制:65535 KB
    难度:4
     
    描述

    zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。

    规定,所有的边都只能画一次,不能重复画。

     
    输入
    第一行只有一个正整数N(N<=10)表示测试数据的组数。
    每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
    随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
    输出
    如果存在符合条件的连线,则输出"Yes",
    如果不存在符合条件的连线,输出"No"。
    样例输入
    2
    4 3
    1 2
    1 3
    1 4
    4 5
    1 2
    2 3
    1 3
    1 4
    3 4
    样例输出
    No
    Yes
    

    #include<stdio.h>
    #include<string.h>
    int p[1005],visit[1005],G[1005][1005];
    int point,line;

    void DFS(int i)
    {
     int v=i;
     visit[i]=1;
     for(v=0;v<point;++v)
     {
      if(v!=i&&G[i][v]&&!visit[v])
       DFS(v);
     }
    }

    int main()
    {
     int n,i,x,y,count,flag;
     scanf("%d",&n);
     while(n--)
     {
      count=0;
      flag=1;
      scanf("%d%d",&point,&line);
      memset(p,0,sizeof(p));//统计各节点的度
      memset(visit,0,sizeof(visit));//访问标记数组
      memset(G,0,sizeof(G));//邻接矩阵 
      for(i=0;i<line;++i)
      {
       scanf("%d%d",&x,&y);
       G[x-1][y-1]=G[y-1][x-1]=1;
       ++p[x-1];
       ++p[y-1];
      }
      DFS(0);//判断是否连通
      for(i=0;i<point;++i)
      {
       G[i][i]=1;
       if(visit[i]==0)
        flag=0;
       if(p[i]&1)
        ++count;
      }
      if(flag)//说明是连通图
      {
       if(count==2||count==0)
        printf("Yes\n");
       else
        printf("No\n");
      }
      else
       printf("No\n");
     }
     return 0;
    }

    功不成,身已退
  • 相关阅读:
    spring boot学习01【搭建环境、创建第一个spring boot项目】
    C#窗体学生成绩管理系统
    七、整合SQL基础和PL-SQL基础
    六、异常处理概念
    五、PL/SQL循环、游标、函数和过程
    四、SQL基础知识--约束和视图
    三、Oracle常用内置函数
    二、事务
    一、SQL基础知识点补充
    前端未掌握知识点记录
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2527029.html
Copyright © 2011-2022 走看看