http://hihocoder.com/contest/hiho50/problem/1

这题有重边,所以邻接矩阵用来统计节点u,v之间有多少条边相连,并且用另外一个数组统计每个节点的入度.

然后查找一个入度为奇数的点进行dfs(如果不存在就从n开始),

dfs的时候每次经过一条边就把这条边删除,因为一条边不会经过两次。

递归的时候保存路径.

总结起来:求解欧拉回路的方法就是,使用dfs,如果某条边被搜索到,则删除这条边,每次dfs结束之后,看当前节点还有没有与之相连的边,有就继续dfs下去.

最后,记录的回溯路径就是欧拉回路.

 #include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
int p[],in[];
int n,m,j;
int g[][];
void dfs(int x)
{
//printf("%d\n",x);
for(int i=;i<=n;i++)
{
if(g[x][i])
{
//printf("%d\n",g[x][i]);
int u=g[x][i];
g[x][i]--;
g[i][x]--;
dfs(i); //
}
}
p[j++]=x;
}
int main()
{
//freopen("a.txt","r",stdin);
int a,b,k;
while(~scanf("%d%d",&n,&m))
{
memset(g,,sizeof(g));
memset(in,,sizeof(in));
for(int i=;i<m;i++)
{
scanf("%d%d",&a,&b);
in[a]++;
in[b]++;
g[a][b]++;
g[b][a]++;
}
memset(p,,sizeof(p));
j=;
for(int i=;i<=n;i++)
if(in[i]&)
{
k=i;
break;
}
// printf("%d\n",j);
if(k<=n) dfs(k);
else dfs(n);
for(int i=;i<j-;i++)
printf("%d ",p[i]);
printf("%d\n",p[j-]);
}
return ;
}

从别人看到了输入挂:

 #include <cstdio>
int g[][]={},path[]={},N,M,u,v,i,pathsize=,start,deg[]={};
char ch;
void read(int &aa)
{
aa=;
while(ch=getchar(),(ch<''||ch>'')&&(ch!='-'));
while(ch>=''&&ch<='') {aa=(aa<<)+(aa<<)+ch-'';ch=getchar();}
}
void dfs(int b)
{
for(int i=;i<=N;++i) {
if(i!=b&&g[b][i]) {
--g[b][i],--g[i][b];
dfs(i);
}
}
++pathsize;
path[pathsize]=b;
}
int main()
{
read(N),read(M);
for(;M--;) {
read(u),read(v);
++g[u][v],++g[v][u];
++deg[u],++deg[v];
}
for(start=;start<=N;++start)
if(deg[start]&)
break;
if(start<=N)
dfs(start);
else
dfs(N);
for(i=;path[i];++i) printf("%d ",path[i]);
}

最新文章

  1. Android中的自定义控件(二)
  2. Java程序设计之链表结构
  3. Opentaps安装小记
  4. Struts2中动态方法的调用
  5. Vs2015智能提示英文?
  6. 委托 C#
  7. 自定义UserProvider,更改验证方法
  8. linux下c程序调用reboot函数实现直接重启【转】
  9. nginx详细配置文件 (转)
  10. 【Windows】Windows中的数据类型以及命名
  11. 关于jQuery中的attr和data问题
  12. 顽强的的砂锅之——深究finally代码块与return语句的执行顺序!
  13. 1.0 配置 appium + java的环境
  14. css随笔属性
  15. svn搭建文档
  16. 机器学习系列-tensorflow-03-线性回归Linear Regression
  17. Twitter基于R语言的时序数据突变检测(BreakoutDetection)
  18. Android自定义视图一:扩展现有的视图,添加新的XML属性
  19. File /data/binlog/mysql-bin.index&#39; not found (Errcode: 13)
  20. ES6模块的import和export用法

热门文章

  1. AJPFX关于通过索引获取最大值的思路
  2. C#方法参数关键字
  3. 批处理 reg add /?
  4. centos7.2密码在单用户下面的修改
  5. codeforces_C. Maximum Subrectangle
  6. 引用类型 (Reference Type Matters)、扩展与派发方式
  7. shell脚本批量/单独启动、停止、重启java独立jar程序
  8. fastclick.js插件使用
  9. yum 软件管理器
  10. day21 04 三级菜单