请教一个问题,找出所有路径 请教高手,现在有一个图结构,已知了其中各个相邻节点的邻接关系矩阵现在想从任意一个图的边界点(入口)出发,找到从这个入口出发到达所有其他边界点的所有路径。等高手解答,最好能附上java编写的java源代码。忘高手赐教。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 具体点 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+"****************"); } } } 关于栈的问题 请问一下JVM加载class文件的原理机制? 又有看不懂的代码了.. 如何让jsp中让表头大小固定? 执行一次大概需要多长时间? 奇怪的事情 请问如何将java程序编译成可执行程序??? 一个简单的用于http服务器的线程池的例子 java的gui程序是怎么得到事件发生的消息的呢? 请教一个问题 swing 2个JTable的拖拽问题 辣手的问题!code生成算法
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+"****************");
}
}
}