zoukankan      html  css  js  c++  java
  • 深度优先搜索——一笔画问题(欧拉图问题)

    题目描述

    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

    代码:
     1 #include<iostream>
     2 #include<string>
     3 using namespace std;
     4 
     5 int a[100][100]={0};
     6 int book[100][100]={0};    //这种初始化只能初始化为0,不能初始化为其他的数字
     7 int node=0;            //点数
     8 int edge=0;            //边数
     9 int num=0;            //遍历过的边数
    10 int fangxiang[100]={0};
    11 int k=0;    //嵌套次数
    12 int flag=0;
    13 
    14 int DFS(int step)
    15 {
    16     k++;
    17     fangxiang[k]=step;
    18     int i,j;
    19     if(num==edge)
    20     {
    21         flag=1;
    22         for(i=1;i<=k;i++)
    23             cout<<fangxiang[i]<<"--";
    24         cout<<endl;
    25         return 1;
    26     }
    27     for(i=1;i<=node;i++)
    28     {
    29         if(a[step][i]==1&&book[step][i]==0)
    30         {
    31             num++;
    32             book[step][i]=1;
    33             book[i][step]=1;
    34             DFS(i);
    35             book[step][i]=0;
    36             book[i][step]=0;
    37             num--;
    38             fangxiang[k]=0;
    39             k--;
    40         }
    41     }
    42     return 0;
    43 }
    44 
    45 int main()
    46 {
    47     cin>>node>>edge;
    48     int i=0,x,y;
    49     for(i=1;i<=edge;i++)
    50     {
    51         cin>>x>>y;
    52         a[x][y]=1;
    53         a[y][x]=1;
    54     }
    55     for(i=1;i<=node;i++)
    56     {
    57         DFS(i);
    58         fangxiang[k]=0;
    59         k--;
    60     }
    61     if(flag)
    62         cout<<"yse"<<endl;
    63     else
    64         cout<<"no"<<endl;
    65 }

    代码有点乱,没时间整理,并且没有按照题目输出要求来,只是为了练习深度优先搜索而写的。

  • 相关阅读:
    设计模式六大原则之单例模式
    SpringCloud Alibaba Seata---处理分布式事务
    SpringCloud Alibaba Sentinel---实现熔断与限流
    Linux下Nacos集群与持久化配置
    SpringCloud Alibaba Nacos---服务注册与配置中心
    SpringCloud(H版)学习---分布式请求链路追踪
    Markdown主要语法及使用
    project read error(项目读取错误)
    详解C3P0(数据库连接池)
    Java一般命名规范
  • 原文地址:https://www.cnblogs.com/fangyan5218/p/4729405.html
Copyright © 2011-2022 走看看