這個題目其實很不錯,又刷新了一下我對遞歸的理解
題目是對有向歐拉圖的遍歷。寫的時候想到的是無腦走的話,如果按一個環來回走,可能會漏掉邊
然後我想着把這個走過的環去掉,但是代碼就很難寫了
最吊的一點就是讓遞推去無腦遍歷是不會出現無解的情況的。。。真是菜。。。
/*
ID: daniel.20
LANG: JAVA
TASK: tour
*/
import java.util.*;
import java.io.*;
class edge{
int from, to, next;
public edge(int a, int b, int c){
from=a;to=b;next=c;
}
void print(){
System.out.println(from+"->"+to);
}
}
class pb1{
int n,m;
int step[];
edge[] edges;
int header[];
int index;
boolean[] vis;
void solver() throws IOException{
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(reader.readLine());
n = Integer.valueOf(st.nextToken());
m = Integer.valueOf(st.nextToken());
step = new int[2*m];
edges = new edge[2*m];
header = new int[2*n+1];
Arrays.fill(header, -1);
vis = new boolean[2*m];
for(int i=0;i<m;i++){
st = new StringTokenizer(reader.readLine());
int a = Integer.valueOf(st.nextToken());
int b = Integer.valueOf(st.nextToken());
edges[index]=new edge(a,b,header[a]);
header[a]=index++;
edges[index]=new edge(b,a,header[b]);
header[b]=index++;
}
dfs(1);
}
void dfs(int cur){
for(int i=header[cur];i!=-1;i=edges[i].next){
if(vis[i]) continue;
vis[i]=true;
dfs(edges[i].to);
}
System.out.println(cur);
}
}
public class tour {
public static void main(String[] args) throws Exception {
pb1 p = new pb1();
p.solver();
}
}