欧拉回路求解

2024-06-15 19:38
文章标签 欧拉 求解 回路

本文主要是介绍欧拉回路求解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先判断能不能形成欧拉回路 如果能那就输出欧拉回路路径


zoj 2238 poj 1780 Code

输出一个数字序列 使得n位的十进制数都在里面

递归的方法求解

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>#define eps 1e-8
#define op operator
#define MOD  10009
#define MAXN  1000100
#define INF 0x7fffffff
#define MEM(a,x)    memset(a,x,sizeof a)
#define ll __int64using namespace std;int list[MAXN];
int s[MAXN];
char ans[MAXN];
int cnt,res;void dfs(int v,int m)
{
//    cout<<"dfs"<<endl;int w;while(list[v]<10){w=v*10+list[v];list[v]++;s[cnt++]=w;v=w%m;}
}int main()
{
//freopen("ceshi.txt","r",stdin);int n;while(scanf("%d",&n)!=EOF){if(n==0)  break;if(n==1){puts("0123456789");continue;}int m=(int)pow(10.0,(double)(n-1));  //m=10^(n-1)MEM(list,0);cnt=0; res=0;int v=0;dfs(v,m);
//        cout<<"1111"<<endl;while(cnt){v=s[--cnt];ans[res++]=v%10+'0';v/=10;dfs(v,m);
//            cout<<"222"<<endl;}
//        cout<<"3333"<<endl;for(int i=1;i<n;i++)printf("0");while(res)  printf("%c",ans[--res]);puts("");}return 0;
}

Fleury算法

能不走桥就不走桥

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string.h>
#include <string>#define eps 1e-8
#define op operator
#define MOD  10009
#define MAXN  200
#define INF 0x7fffffff
#define MEM(a,x)    memset(a,x,sizeof a)
#define ll __int64using namespace std;int n,m;//顶点个数
struct stack
{int top,node[MAXN];
};
stack s;
int edge[MAXN][MAXN];void dfs(int x)
{
//    cout<<"xxxx "<<x<<endl;s.top++;s.node[s.top]=x;for(int i=0;i<n;i++){if(edge[i][x]>0){edge[i][x]=0; edge[x][i]=0;dfs(i);break;}}
}void Fleury(int x)
{s.top=0; s.node[s.top]=x;while(s.top>=0){int b=0;for(int i=0;i<n;i++){if(edge[s.node[s.top]][i]>0){b=1;  break;}}if(b==0){printf("%d ",s.node[s.top]+1);s.top--;}else{s.top--;dfs(s.node[s.top+1]);}}puts("");
}int main()
{
freopen("ceshi.txt","r",stdin);scanf("%d%d",&n,&m);MEM(edge,0);int s,e;for(int i=0;i<m;i++){scanf("%d%d",&s,&e);edge[s-1][e-1]=1; edge[e-1][s-1]=1;}//如果存在奇数度顶点 则从奇数度顶点出发  否则从顶点0出发int num=0,start=0;for(int i=0;i<n;i++){int d=0;for(int j=0;j<n;j++)d+=edge[i][j];//看有多少点与该点相连  如果奇数  就是奇数度if(d&1){start=i;num++;}}if(num==0||num==2)  Fleury(start);else printf("No Eular path\n");return 0;
}




  

这篇关于欧拉回路求解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064385

相关文章

poj 3259 uva 558 Wormholes(bellman最短路负权回路判断)

poj 3259: 题意:John的农场里n块地,m条路连接两块地,w个虫洞,虫洞是一条单向路,不但会把你传送到目的地,而且时间会倒退Ts。 任务是求你会不会在从某块地出发后又回来,看到了离开之前的自己。 判断树中是否存在负权回路就ok了。 bellman代码: #include<stdio.h>const int MaxN = 501;//农场数const int

uva 1342 欧拉定理(计算几何模板)

题意: 给几个点,把这几个点用直线连起来,求这些直线把平面分成了几个。 解析: 欧拉定理: 顶点数 + 面数 - 边数= 2。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#inc

欧拉系统 kernel 升级、降级

系统版本  cat  /etc/os-release  NAME="openEuler"VERSION="22.03 (LTS-SP1)"ID="openEuler"VERSION_ID="22.03"PRETTY_NAME="openEuler 22.03 (LTS-SP1)"ANSI_COLOR="0;31" 系统初始 kernel 版本 5.10.0-136.12.0.

2024 年高教社杯全国大学生数学建模竞赛题目——2024 年高教社杯全国大学生数学建模竞赛题目的求解

2024 年高教社杯全国大学生数学建模竞赛题目 (请先阅读“ 全国大学生数学建模竞赛论文格式规范 ”) 2024 年高教社杯全国大学生数学建模竞赛题目 随着城市化进程的加快、机动车的快速普及, 以及人们活动范围的不断扩大,城市道 路交通拥堵问题日渐严重,即使在一些非中心城市,道路交通拥堵问题也成为影响地方经 济发展和百姓幸福感的一个“痛点”,是相关部门的棘手难题之一。 考虑一个拥有知名景区

nyoj99(并查集+欧拉路+dfs)

单词拼接 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串。 前一个单词的结尾应该与下一个单词的道字母相同。 如 aloha dog arachnid gopher tiger rat   可以拼接成:aloha.arachnid.dog.gopher.rat.tiger 输入 第一行是一个整

nyoj42(并查集解决欧拉回路)

一笔画问题 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 4 描述 zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。 规定,所有的边都只能画一次,不能重复画。   输入 第一行只有一个正整数N(N<=10)表示测试数据的组数。 每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<

UVa 10820 Send a Table (Farey数列欧拉函数求和)

这里先说一下欧拉函数的求法 先说一下筛选素数的方法 void Get_Prime(){ /*筛选素数法*/for(int i = 0; i < N; i++) vis[i] = 1;vis[0] = vis[1] = 0;for(int i = 2; i * i < N; i++)if(vis[i]){for(int j = i * i; j < N; j += i)vis[j] =

基于SA模拟退火算法的多车辆TSP问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述        基于SA模拟退火算法的多车辆TSP问题求解matlab仿真,三个车辆分别搜索其对应的最短路径,仿真后得到路线规划图和SA收敛曲线。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 (完整程序运行后无水印)

OpenGL/GLUT实践:流体模拟——数值解法求解Navier-Stokes方程模拟二维流体(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub:A-UESTCer-s-Code 文章目录 1 实现效果2 实现过程2.1 流体模拟实现2.1.1 网格结构2.1.2 数据结构2.1.3 程序结构1) 更新速度场2) 更新密度值 2.1.4 实现效果 2.2 颜色设置2.2.1 颜色绘制2.2.2 颜色交互2.2.3 实现效果 2.3 障碍设置2.3.1 障碍定义2.3.2 障碍边界条件判定2.3.3 障碍实现2.3.

JD 1147:Jugs(一种用最少步骤求解的方法)

OJ题目:click here~~ 题目分析:九度上这道没有要求最少步数,只要得到最后结果即可AC , bfs , dfs都行。最少步骤的方法肯定也能AC啦,分析如下。 输入的三个数:a,b,n;> 由题不定方程ax+by=n必定有解> 如果b=n,则fill B即可,否则用试探法求出这样的两组解(a1,b1)及(a2,b2),其中a1 >0,b1<0;a1是满足方程的最小正整数;a2