首页 > 其他分享 >2070 欧拉回路--[中等+]

2070 欧拉回路--[中等+]

时间:2024-08-03 17:28:48浏览次数:9  
标签:arr start -- 奇点 int dot ans 2070 欧拉

#include <iostream>
using namespace std;
//arr记录邻接矩阵 dot记录奇点(每个点连接边数量) ans数组存储结果 
int arr[105][105],dot[105],n,m,ans[105];
//记录奇点
int start[3], sum=0;
 
//x正在到达的结点 cnt是数组ans的下标
void dfs(int x,int cnt){
    //边界条件:1.找到了奇点1/奇点2 2.欧拉回路:所有路径都走过一次 
    if((x==start[1]||x==start[2])&&sum==m){
        //输出
        for(int i=1; i<cnt; i++)     
            cout<<ans[i]<<" ";
        exit(0);
    } 
    //非边界条件:循环看一看哪些点没有走还可以走
    for(int i=1;i<=n;i++){
        //联通
        if(arr[x][i]==1){
            //1.记录当前点
            ans[cnt]=i;
            //2.删除走过的边
            arr[i][x]=arr[x][i]=0;
            //3.计数
            sum++;
            //递归
            dfs(i, cnt+1);
            //回溯:删除的边还原,计数的数删除 
            arr[i][x]=arr[x][i]=1;
            sum--;
        } 
    } 
}

int main(){
    //1.输入
    cin>>n>>m;
    //2.构建无向图邻接矩阵
    for(int i=1;i<=m;i++){
        int a,b;
        cin>>a>>b;
        dot[a]++, dot[b]++;
        arr[a][b]=arr[b][a]=1;
    }
    //统计
    int k=0; 
    start[1]=1;
    //3.记录每个结点连接边数量
    for(int i=1;i<=n;i++){
        if(dot[i]%2==1){
            k++;
            start[k]=i;
        }
    }
    //4.判断:1.奇点为0 2.奇点为2并且1是奇点    //搜索
    if(k==0 || k==2&&start[1]==1){
        ans[1] = start[1];
        dfs(start[1], 2); 
    }else{
        cout << "no oula circle";
    }
    return 0;
}

标签:arr,start,--,奇点,int,dot,ans,2070,欧拉
From: https://blog.csdn.net/nick130817/article/details/140892728

相关文章

  • 门控循环单元GRU
    目录一、GRU提出的背景:1.RNN存在的问题:2.GRU的思想:二、更新门和重置门:三、GRU网络架构:1.更新门和重置门如何发挥作用:1.1候选隐藏状态H~t:1.2隐藏状态Ht:2.GRU:四、训练过程举例******:五、预测过程举例******:六、底层源码:七、Pytorch版代码:一、GRU提出的背景:1.RNN存......
  • Python+Pycharm下载安装教程,基础知识(详细教程)
    这是一篇针对初学者的 Python 基础教程,只要你认真阅读,花费30分钟即可快速了解Python。这篇Python入门教程讲解的知识点包括:Python编程环境的搭建、Python基本操作入门、Python数据类型、Python语句和函数。Python环境下载和配置根据Windows版本(64位/32位)从P......
  • 命名空间的彼此调用
    题目:创建一个控制台应用程序,建立一个命名空间MR.Data,在其中有一个类Modle,在项目中使用using指令引入命名空间MR.Data,然后再命名空间MR.View中即可实例化命名空间MR.Data中的类Modle,最后调用此类中的GetData()方法,代码如下: usingSystem;usingSystem.Collectio......
  • GROUP BY 和 HAVING 子句(看完就会)
    GROUPBY 和 HAVING 子句用于对查询结果进行分组和过滤,它们通常一起使用,但也可以单独使用。GROUPBY子句:GROUPBY 子句用于将查询结果根据一个或多个列进行分组。它将具有相同分组列值的行组合在一起,形成一个组。GROUPBY 子句通常与聚合函数(如 SUM、AVG、COUNT、MAX......
  • weapp.qrcode.esm.js
    /***weapp.qrcode.jsv1.1.5*/varhasOwn=Object.prototype.hasOwnProperty,toStr=Object.prototype.toString,defineProperty=Object.defineProperty,gOPD=Object.getOwnPropertyDescriptor,isArray=function(t){return"function"==typeofArray.isArray?Ar......
  • ORDER BY 子句
    ORDERBY 子句用于对查询结果进行排序。它允许你根据一个或多个列对结果集进行升序或降序排序。ORDERBY关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,可以使用DESC关键字。ASC:表示按升序排序。DESC:表示按降序排序。        1:升序排序(ASC......
  • Go Lang给应用添加带彩色的启动横幅
    1.命令行输入以下命令来安装相关依赖包:-gogetgithub.com/dimiro1/banner-gogetgithub.com/mattn/go-colorable packagemainimport( "fmt" "github.com/dimiro1/banner" "github.com/mattn/go-colorable")funcinit(){ isEnabled:=true......
  • PC畅玩Switch游戏——塞尔达传说 织梦岛 XCI整合
    【收藏】塞尔达传说织梦岛模拟器版本资源中文版1.0.1升补XCI整合模拟器安装关于模拟器安装可以参看之前发布的模拟器安装教程游戏剧情简介《塞尔达传说:织梦岛》是任天堂制作的Q版二头身动作角色扮演游戏。本作是极少数几个故事没有发生在传说中的海拉尔王国大陆的......
  • @ConfigurationProperties注解获取为null的问题或者获取不到值的问题
    结论:set方法不能被static修饰、不能被private修饰、不能被protect修饰,不能被abstract修饰,不能是Object和Class理论依据:1、springboot源码 JavaBeanBinder文件下的isCandidate方法privatebooleanisCandidate(Methodmethod){intmodifiers=method.g......
  • Objective-C学习笔记(协议和代理)
    协议协议是多个类共享的一个方法列。协议中列出的方法没有相应的实现,计划由其他人来实现。可以定义这些方法为必须实现的,也可以为可选择实现的@protocal协议名//在此处添加必须实现的协议方法@optional//在此处添加可选择实现的协议方法@end遵循协议也符合继承关系......