标签:
4 5 1 2 1 4 2 3 2 4 3 4
1 2 3 4 2 1 4 3 2 4 1
给定n个点m条边的无向图G=(V,E),求一回路,经过所有边两次且仅两次,且要求第二次经过同一条边时行进的方向与第一次不同。
先把一条边拆成两条边,转化成有向图,然后欧拉回路。
#include<iostream> #include<cstdio> #define M 50010 #define N 10010 using namespace std; struct edge_node { int to,next; bool vis; }e[M*2]; int head[N]; int cnt; void ins(int u,int v) { e[++cnt].to = v; e[cnt].next = head[u]; head[u] = cnt; e[cnt].vis = false; } void find(int u) { for (int i=head[u];i;i=e[i].next) { if (!e[i].vis) { e[i].vis = true; find(e[i].to); } } printf("%d\n",u); } int main() { int n,m,u,v; scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&u,&v); ins(u,v); ins(v,u); } find(1); }
标签:
原文地址:http://www.cnblogs.com/liumengyue/p/5495305.html