undefined
发贴: 22
积分: 3
|
于 2005-06-02 22:43
import java.io.*;
public class GraphTest { public static void main(String[] args) { Graph G = new Graph(5, false); GraphDFS show = new GraphDFS(G); } }
class GraphDFS { private boolean[] visited; int i;
public GraphDFS(Graph G) { visited = new boolean[G.getVexs()]; for (i = 0; i < visited.length; i++) visited[i] = false; for (i = 0; i < G.getVexs(); i++) if (!visited[i]) DFS(G, i); } private void DFS(Graph G, int i) { System.out.println(G.Nodes[i].value); visited[i] = true; while (!G.Nodes[i].adj.eof()) { if (!visited[G.Nodes[i].adj.value()]) DFS(G, G.Nodes[i].adj.value()); G.Nodes[i].adj.goNext(); } }
} class Graph { private int vexCount; private int edgeCount; private boolean digraph; public gNode[] Nodes=null;
public Graph(int v, boolean isDig) { vexCount = v; edgeCount = 0; digraph = isDig; Nodes = new gNode[vexCount]; System.out.println(vexCount); for (int i = 0; i < vexCount; i++) { System.out.println("请输入第" + (i + 1) + "个顶点的值:"); Nodes[i]=new gNode(input.getInt()); //Nodes[i].setValue(input.getInt()); //System.out.println("GGGGGGGGGGGGG"); } System.out.println("\n请输入边数:"); int e = input.getInt(); for (int i = 0; i < e; i++) { System.out.println("请输入第" + (i + 1) + "条边的起始顶点序号:"); int ve = input.getInt(); System.out.println("请输入第" + (i + 1) + "条边的终止顶点序号:"); int w = input.getInt(); addEdge(ve, w); } }
int getVexs() { return vexCount; } int getEdges() { return edgeCount; } boolean isDigraph() { return digraph; }
void addEdge(int v, int w) { if(v<vexCount) { Nodes[v].adj.add; }else { System.out.println("ERROR"); } if (!isDigraph()) { if(w<vexCount) { Nodes[w].adj.add(v); edgeCount++; }else { System.out.println("ERROR"); } } edgeCount++; } }
class gNode //图中的顶点 { public int value; public adjList adj; public gNode(int v) { value = v; adj = new adjList(); } public void setValue(int v) { value=v; } }
class adjList //邻接表 { private gEdge e, current; public adjList() { e = null; current = e; } public void add(int vex) { e = new gEdge(vex, 0, e); current = e; } public void add(int vex, int weight) { e = new gEdge(vex, weight, e); current = e; } public int value() { return current.v; } public int weight() { return current.weight; } public void goNext() { if (!eof()) current = current.next; } public void goFirst() { current = e; } public boolean eof() { return current == null; }
}
class gEdge //邻接表中的结点 { int v, weight; gEdge next; public gEdge(int vex, int w, gEdge g) { v = vex; weight = w; next = g; } }
class input { static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static String s; static int p; public input() { s = ""; p = 0; } public static String getString() { try { s = br.readLine(); } catch (IOException e) { System.out.println("IO Error !"); }; return s; } public static int getInt() { String t; t = getString(); try { p = Integer.valueOf(s.trim()).intValue(); } catch (NumberFormatException e) { // 您的输入有误 return 0; } return p; } }
|