您的位置:首页 > 理论基础 > 数据结构算法

3364-数据结构实验之图论八:欧拉回路

2017-12-07 17:12 302 查看
#include <iostream>
#include <cstring>
#define MAX 0x3f3f3f3f

using namespace std;
int map[1123][1123];
int vis[1123], b[1123];
int flag;

bool judge(int n)
{
for(int i = 1; i <= n; i++)
{
if(!vis[i] || b[i] % 2) /// 如果无向图连通并且所有结点的度都是偶数,则存在欧拉回路,否则不存在。
{
return false;
}
}
return true;
}

void dfs(int x, int n)
{
vis[x] = 1;
if(map[x][1] == 1) /// 如果回到原点
{
if(judge(n)) /// 如果所有的点都被标记
{
flag = 1;
return ;
}
}

for(int i = 1; i <= n; i++)
{
if(flag)
{
return ;
}
if(map[x][i] && !vis[i])
{
dfs(i,n);
}
}
vis[x] = 0; /// 如果该点未找到欧拉回路 取消标记
}
int main()
{
int t, m, n;
cin >> t;
while(t--)
{
flag = 0;
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
memset(b,0,sizeof(b));

cin >> n >> m;

while(m--)
{
int u, v;
cin >> u >> v;
map[u][v] = map[v][u] = 1;
b[u]++;
b[v]++;
}

dfs(1,n);

cout << flag << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: