您的位置:首页 > 其它

SCU2016-01 J 题 欧拉路径

2016-09-04 23:21 281 查看

分析

只有七中数字,那么图中的边数也不会太多。直接dfs去找一条欧拉路径就可以了。。。

欧拉回路和欧拉路径都可以直接dfs找

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define pr(x) cout << #x << ": " << x << "  "
#define pl(x) cout << #x << ": " << x << endl;
struct node
{
int from;
int to;
int next;
int w;
int num;
int flag;
} e[2000+50];
int ans[150];
int head[10];
int degree[10];
int n,cont,ok,contz;
void add(int from,int to)
{
e[cont].from=from;
e[cont].to=to;
e[cont].next=head[from];
e[cont].num=cont;
e[cont].flag=0;
head[from]=cont++;
}
void Dfs(int x)
{
for(int i=head[x];i!=-1;i=e[i].next)
{
if(e[i].flag==0)
{
e[i].flag=1;
e[i^1].flag=1;
Dfs(e[i].to);
ans[contz++]=i;
}
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int pos=0;
cont=0;
contz=0;
memset(head,-1,sizeof(head));
for(int i=0;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
pos=x;
degree[x]++;
degree[y]++;
}
int tt=0;
for(int i=0;i<=6;i++)
{
if(degree[i]%2==1)
{
tt++;
pos=i;
}
}
if(tt!=2&&tt!=0)
{
printf("No solution\n");
}
else
{
Dfs(pos);
if(contz!=n)
{
printf("No solution\n");
}
else
{
for(int i=0;i<n;i++)
{
printf("%d ",ans[i]/2+1);
if(ans[i]%2==0)
{
printf("-\n");
}
else printf("+\n");
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: