博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Uvaoj10054 - The Necklace
阅读量:5941 次
发布时间:2019-06-19

本文共 1381 字,大约阅读时间需要 4 分钟。

/*    题意:打印欧拉回路!    思路:开始时不明白,dfs为什么是后序遍历?     因为欧拉回路本身是一条回路,那么我们在dfs时,可能存在提前找到回路,这条回路可能不是欧拉回路,    因为没有遍历完成所有的边!如果写成前序遍历的话,存储起来的路径就不是一条完整的路径了!它有可能    是多条回路组成的!答案就是错误 的!如果是后序遍历的话,当dfs是遇到了回路,那么就退出当前栈的搜索!    去寻找其他的路径!最终得到的只有一条回路路径!-->欧拉回路~! */ #include
#include
#define M 55#define Max 0x3f3f3f3fusing namespace std;int cnt[M][M];int deg[M];int map[M][M];int x;struct Point{ int x, y; Point(){} Point(int x, int y){ this->x=x; this->y=y; }}; Point p[1005];int top;void dfs(int u){ if(!deg[u]) return; for(int i=1; i<=50; ++i) if(map[u][i] && cnt[u][i]){ --cnt[u][i]; --cnt[i][u]; --deg[u]; --deg[i]; dfs(i); p[++top]=Point(u, i); } }int main(){ int t, n, k=0; cin>>t; while(t--){ cin>>n; x=Max; memset(cnt, 0, sizeof(cnt)); memset(map, 0, sizeof(map)); memset(deg, 0, sizeof(deg)); for(int i=1; i<=n; ++i){ int u, v; cin>>u>>v; deg[u]++; deg[v]++; map[u][v]=1; map[v][u]=1; cnt[u][v]++; cnt[v][u]++; if(x>u) x=u; if(x>v) x=v; } int ok=0; for(int i=1; i<=50; ++i) if(deg[i]%2!=0){ ok=1; break; } cout<<"Case #"<<++k<
=1; --top) cout<
<<" "<
<

转载地址:http://ibhtx.baihongyu.com/

你可能感兴趣的文章
python----tcp/ip http
查看>>
我的友情链接
查看>>
第一本docker书学习笔记1-3章
查看>>
一個典型僵尸網絡淺析
查看>>
vmware克隆Centos6.4虚拟机网卡无法启动问题
查看>>
dba学习
查看>>
asterisk配置
查看>>
GA操作步骤和技巧(二)——用户行为分析
查看>>
shell中while循环里使用ssh的注意事项
查看>>
SHELL获取计算机外网ip的几种写法
查看>>
博客正在搬迁中
查看>>
触发器与存储过程的区别
查看>>
我的友情链接
查看>>
centos搭建supervisor
查看>>
linux日志分割
查看>>
Samba再报安全漏洞
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Spring学习资料之 依赖注入(一)
查看>>
安装win7提示安装程序无法创建新的系统分区和定位现有系统分区
查看>>