请教高手,现在有一个图结构,已知了其中各个相邻节点的邻接关系矩阵
现在想从任意一个图的边界点(入口)出发,找到从这个入口出发到达所有其他边界点的所有路径。
等高手解答,最好能附上java编写的java源代码。
忘高手赐教。

解决方案 »

  1.   

    具体点 dfs的程序我写好了,请帮我看看需要怎么修改
    package cn.edu.bjtu.rjxy.wsk.dao; import java.util.ArrayList; class Stack {//Stack为辅助结构,用来记载访问过的节点 
    public int[] values; 
    private int pos = -1; Stack(int size) { 
    values = new int[size]; 
    } void push(int value) { 
    values[++pos] = value; 
    } int pop() { 
    return values[pos--]; 
    } int peek() { 
    return values[pos]; 
    } boolean isEmpty() { 
    return pos == -1; 

    } class Vertex {//Vertex表示图中的节点,其中包含访问,是否访问,清除访问标志的方法。 
    public Object value; 
    public boolean isVisited; Vertex(Object value) { 
    this.value = value; 
    } void visit() { 
    isVisited = true; 
    // print(); 
    } void clean() { 
    isVisited = false; 
    } boolean isVisited() { 
    return isVisited; 
    } void print() { 
    System.out.println(value); 

    } class Graph { 
    private Vertex[] vertexs; 
    private int[][] adjMat;//邻接矩阵 
    private int pos = -1; Graph(int size) { 
    vertexs = new Vertex[size]; 
    adjMat = new int[size][size]; 
    } void add(Object value) { 
    assert pos < vertexs.length; 
    vertexs[++pos] = new Vertex(value); 
    } void connect(int from, int to) { 
    adjMat[from][to] = 1; 
    adjMat[to][from] = 1; 
    } void con(Object o1,Object o2) 

    int i=0,j=0; 
    for(int a=0;vertexs[a]!=null;a++) 

    if((vertexs[a].value).equals(o1)) 

    i=a; 

    if((vertexs[a].value).equals(o2)) 

    j=a; 


    //System.out.println("i="+i+"j="+j); 
    adjMat[i][j] = 1; 
    // adjMat[j][i] = 1; 

    void disConnect(int from, int to) { 
    adjMat[from][to] = 0; 
    adjMat[to][from] = 0; 
    } int findNeighbor(int index) { 
    for (int i = 0; i <= pos; i++) { 
    if (adjMat[index][i] == 1 && !vertexs[i].isVisited()) 
    return i; 

    return -1; 
    } ArrayList <String> dsf(Object o) { // 从指定下标的节点开始深度优先遍历 
    int index=0; 
    ArrayList <String> arraylist = new ArrayList <String>(); 
    for(int a=0;vertexs[a]!=null;a++) 

    if((vertexs[a].value).equals(o)) 

    index = a; 


    if (vertexs[index] == null) 
    //return;  如果图中没有指定下标节点,则退出 
    System.out.print("找不到该路段"); 
    else 

    Stack s = new Stack(vertexs.length); // 创建栈记载访问过的节点的下标 
    vertexs[index].visit(); // 访问0节点 s.push(index); // 记录0节点 while (!s.isEmpty()) { // 如果还有记录的节点则继续 
    index = findNeighbor(s.peek()); // 寻找栈顶节点的未访问过的邻居 
    if (index != -1) { // 如果找到 
    vertexs[index].visit(); // 访问该节点 
    s.push(index); // 记录该节点 
    } else 

    /*for(int i = 0;i <s.values.length;i++) 

    System.out.print(vertexs[s.values[i]].value+" "); 

    System.out.println();*/ 
    for(int b=0;vertexs[b]!=null;b++) 

    if(vertexs[b].isVisited()) 

    System.out.print((String)vertexs[b].value); 


    System.out.println(); 
    vertexs[s.peek()].clean(); 
    s.pop(); // 没有未访问过的节点,则出栈 

    } // 如果栈未空则代表遍历完成 
    for(int b=0;vertexs[b]!=null;b++) 

    if(vertexs[b].isVisited()) 

    arraylist.add((String)vertexs[b].value); 


    clean(); // 清除所有访问标致 

    return arraylist; 
    } void clean() { 
    for (Vertex v : vertexs) 
    if (v != null) 
    v.clean(); 
    } } public class DFS { 
    /* 
    * public static void DFS(int Vertex) { int Pointer; // 结点声明 int i; 
    * Visited[Vertex] = 1; // 已搜索 System.out.print("["+Vertex+"]= =>"); 
    * for(i=1;i <VertexNum;i++) { if(Graph[Vertex][I] = =1&&Visited[I] = =0) 
    * DFS(i); // 递归调用 } } 
    */ 
    public static void main(String[] args) { 
    Graph g = new Graph(20); 
    g.add("a"); 
    g.add("b"); 
    g.add("c"); 
    g.add("d"); 
    g.add("e"); 
    // g.connect(0, 1); 
    // g.connect(1, 2); 
    // g.connect(0, 3); 
    // g.connect(3, 4); 
    g.con("a", "b"); 
    g.con("c", "d"); 
    g.con("a", "c"); 
    g.con("c","e"); for(int i=0;i <5;i++) 

    g.dsf(i); 
    System.out.println(i+"****************");