ccf 201512-4 送货 无向图欧拉回路
来源:互联网 发布:中美打击网络犯罪 编辑:程序博客网 时间:2024/04/27 21:40
Problem:
n个节点m条路,看成一个无向图,判断能否每条路直走一次。
Solution:
先判断度,只能是1个或2个奇数度。
然后判断边的数目是否等于m,否则是非连通图。
然后按字典序最小遍历即可,此时一定会有一条回路。
#include <stdio.h>#include <queue>using namespace std;const int max_v = 15;int G[max_v][max_v];int degree[max_v];int n, start = 0, edge = 0;queue<int> q;bool okDeg() {//只能有0个或2个点是奇数个度 int odd = 0; for (int i = 0; i < n; i++) { if(degree[i]%2 != 0) { odd++; if(start != 0) start = min(i, start); } if(odd > 2) return false; } if(odd == 1) return false; else return true;}void dfs(int root) {//判断无向图的连通性 edge++; q.push(root); for(int i = 0; i < n; i++) { if(G[root][i]>0) { G[root][i] = G[i][root] = 0; dfs(i); } }}/* 4 6 1 2 1 3 1 4 2 4 3 4 2 3 */int main() { // freopen("/Users/really/Documents/code/input","r",stdin); memset(G, 0, sizeof(G)); int m; scanf("%d%d", &n, &m); for(int i = 0; i < m; i++) { int a, b; scanf("%d%d", &a, &b); G[a-1][b-1] = G[b-1][a-1] = 1; degree[a-1]++; degree[b-1]++; } if(!okDeg()) printf("-1\n"); else { dfs(start); if(edge-1 != m) printf("-1\n"); else { printf("%d", q.front()+1); q.pop(); while(!q.empty()) { printf(" %d", q.front()+1); q.pop(); } printf("\n"); } } return 0;}
阅读全文
0 0
- ccf 201512-4 送货 无向图欧拉回路
- CCF 201512-4 送货(最小字典序欧拉回路)
- CCF 201512-4 送货
- ccf 201512-4 送货
- CCF 201512-4 送货
- 201512-4 送货 ccf
- ccf 201512-4送货
- 无向图欧拉回路
- CCF CSP 送货 欧拉回路/通路
- CCF-201512-4 送货(欧拉路径)
- CCF CSP 送货 JAVA 201512-4
- 无向图欧拉回路求法
- 无向图欧拉回路模板
- ccf 送货
- ccf 送货
- ccf送货
- ccf 送货
- CCF 送货
- 原生JS字符串拼接实例
- 笔记-SimHash
- java中异常
- js的继承问题
- BigDecimal
- ccf 201512-4 送货 无向图欧拉回路
- Struts2拦截器-学习篇三
- 7z lzma920源码封装 C++ DLL,可直接调用压缩
- codeforces——4C—— Registration System
- servlet 下载文件名字 中文乱码 解决
- mongodb find()
- 剑指Offer--顺时针打印矩阵问题
- springboot 学习笔记(一)
- vs中debug和release版本的区别