//首先我认为需要区分的概念是欧拉回路和欧拉通路(算法竞赛入门经典中是欧拉道路),
//无向图:
//欧拉回路,即从无向图的一个节点出发每条边仅经过一次后,可以回到起点的一条回路
//判断方法:1.该无向图连通,这步bfs一次即可2.每个点的度数是偶数
//欧拉通路(欧拉道路),即从无向图的一个节点走出一条道路,每条边恰好经过一次(即不一定要返回起点)
//判断方法1.该无向图连通2.每一个点的度数是0(欧拉回路当然是欧拉通路)或含有2个度数那就只能从一个奇点出发经过其他边另一个奇点为止
//欧拉图:具有欧拉回路的图是欧拉图
//练习:Hdu 1878 欧拉回路
//无向图:
//欧拉回路,即从无向图的一个节点出发每条边仅经过一次后,可以回到起点的一条回路
//判断方法:1.该无向图连通,这步bfs一次即可2.每个点的度数是偶数
//欧拉通路(欧拉道路),即从无向图的一个节点走出一条道路,每条边恰好经过一次(即不一定要返回起点)
//判断方法1.该无向图连通2.每一个点的度数是0(欧拉回路当然是欧拉通路)或含有2个度数那就只能从一个奇点出发经过其他边另一个奇点为止
//欧拉图:具有欧拉回路的图是欧拉图
//练习:Hdu 1878 欧拉回路
//http://acm.hdu.edu.cn/showproblem.php?pid=1878
ac代码:
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
queue<int>q;
int n;
int indegree[1001];
int a[1001][1001];
int panduan()
{
int i;
for (i=1;i<=n;i++)
if (indegree[i]%2)
return 1;
return 0;
}
int bfs()
{
int vis[1001];
int i,j,temp;
q.push(1);
for (i=1;i<=n;i++)