hdu 1878 欧拉回路
http://acm.hdu.edu.cn/showproblem.php?pid=1878
问题描述:无向图欧拉回路的存在性
【无向图】连通 + 所有点的度数为偶数
【有向图】连通 + 所有点的入度数=出度数
思路
dfs + vector建图
参考代码
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
const int _max = 1e3 + 10;
vector<int>g[_max];
int n,m,u,v;
bool vis[_max],ok;
void dfs(int d,int u){
vis[u] = true;
if(d == n) { ok = true;return;}
for(int i = 0;i < g[u].size()&&!ok; ++ i){
int x = g[u][i];
if(!vis[x]){
dfs(d+1,x);
}
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
#endif // ONLINE_JUDGE
while(scanf("%d",&n) == 1 && n){
scanf("%d",&m);
for(int i = 0; i <= n; ++ i) g[i].clear();
for(int i= 0; i < m; ++ i){
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
fill(vis,vis+n+1,false);
ok = false;
dfs(1,1);
if(!ok) {puts("0");continue;}
ok = true;
for(int i = 1; i <= n; ++ i)
if(g[i].size()&1){ok = false;break;}
puts(ok?"1":"0");
}
return 0;
}
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y