您的位置:首页 > 其它

poj 2230 欧拉回路

2011-12-22 11:18 239 查看
题意,一个图,要将每条边恰好遍历两遍,而且要以不同的方向,还要回到原点。

直接dfs一下就好了,vis[]标记边是否访问,不会的仔细模拟一遍哪个dfs就好了

View Code

import java.io.*;
import java.util.*;
import java.math.*;
class Edge{
int v,next;
boolean vis;
Edge (int v,int next){
this.v=v;
this.next=next;
this.vis=false;
}
}
class Graph{
static int MAXN = 10010;
static int n, m, size;
static int[] ans = new int[MAXN*3];
static int[] head = new int[MAXN];
static Edge[] edge = new Edge[MAXN*10];
Graph(){
Arrays.fill(head, -1);
size=0;
}
void add_edge(int u,int v){
edge[size]=new Edge(v,head[u]);
head[u]=size++;
}
void dfs(int u){
for(int i=head[u];i!=-1;i=edge[i].next){
if(!edge[i].vis){
edge[i].vis=true;
dfs(edge[i].v);
}
}
System.out.println(u);
}
}
public class Main{
public static void main(String[] args){
Scanner cin = new Scanner (System.in);
while(cin.hasNext()){
Graph a=new Graph();
a.n=cin.nextInt();
a.m=cin.nextInt();
for(int i=1;i<=a.m;i++){
int u=cin.nextInt();
int v=cin.nextInt();
a.add_edge(u, v);
a.add_edge(v, u);
}
a.dfs(1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: