poj 2230 Watchcow 有向歐拉圖

這個題目其實很不錯,又刷新了一下我對遞歸的理解

題目是對有向歐拉圖的遍歷。寫的時候想到的是無腦走的話,如果按一個環來回走,可能會漏掉邊

然後我想着把這個走過的環去掉,但是代碼就很難寫了

最吊的一點就是讓遞推去無腦遍歷是不會出現無解的情況的。。。真是菜。。。

/*
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();        
    }
}
 


發佈了245 篇原創文章 · 獲贊 0 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章