深度优先算法 演示,还有不完善的地方
来源:互联网 发布:mac sierra pdf 签名 编辑:程序博客网 时间:2024/06/03 15:59
package grap;
import java.util.Stack;
/* A B C D
*A│0 1 1 1
*B│1 0 1 1
*C│1 1 0 1
*D│1 1 1 0
思想:从某一顶点出发,找到邻接表中列位1(可走) 标记位访问
1、如果可能,访问一个邻接的未访问的顶点,标记它,并把放入栈中。
2、当不能执行规则1时,如果栈不空,就从栈中弹出一个顶点。
3、如果不能执行规则1和规则2,就完成了整个搜索的过程。
*/
class V{ // 定义顶点
char label; // 例如'A'。。
boolean isVisited=false;
V(char label){
this.label=label;
}
}
//--------------------------------------------
class VTable{
Stack sk=new Stack();
int vNumber=4;// 顶点个数
V vList[]=new V[vNumber];// 顶点列表
int matrix[][];
VTable(){
vList[0]=new V('A');
vList[1]=new V('B');
vList[2]=new V('C');
vList[3]=new V('D');
/*
matrix=new int[][]{
{1 , 1 , 1 , 1},
{1 , 0 , 1 , 1},
{1 , 1 , 0 , 1},
{1 , 1 , 1 , 0}
};
*/
matrix=new int[][]{
{0 , 0 , 1 , 1},
{0 , 0 , 1 , 1},
{1 , 1 , 0 , 1},
{1 , 1 , 1 , 0}
};
}
public int getUnVisited(int v){ // 获得未读取未访问顶点
for(int j=0;j<vNumber;j++) // 遍历第V杭,若邻接表这行的V列节点没有访问,返回这行列的位置
if(matrix[v][j]==1&&vList[j].isVisited==false)
return j;
return -1;
}
public void display(int v){
System.out.println(vList[v].label);
}
// 核心算法,深度搜索
public void dfs(){
// 从第一顶点访问
vList[0].isVisited=true;
// 打印出来
display(0);
// 第一顶点邻接表自身到自身[0][0]值 放进栈
sk.push(0);
// 当栈不空
while(!sk.isEmpty()){
int v=getUnVisited((Integer) sk.peek()); // 查看栈顶,或得。。。强制转换int
// 假如没有找到等于1(即找到可以到达的路径)
// 出栈
if(v==-1)
sk.pop();
// 假如不空,标记访问,进栈
else{
vList[v].isVisited=true;
display(v);
sk.push(v);
}
}
}
}
//---------------------------------------------
public class DFSdemo {
public static void main(String[] args) {
VTable t=new VTable();
t.dfs();
}
}
- 深度优先算法 演示,还有不完善的地方
- 全排列 数据结构(机工出版) 递归算法 有改动 还有不完善的地方!
- 最短作业优先算法(不完善)
- 一个简单的DFS(深度优先搜索)算法加剪枝技术的程序演示
- MATLAB实现寻路、布线、迷宫的递归深度优先遍历算法_动画演示
- 推荐一个算法演示的地方
- 深度优先算法、广度优先算法 与 图的遍历
- 树的深度优先搜索算法[收藏]
- 树的深度优先非递归算法
- 图的深度优先遍历算法
- 图的深度优先遍历算法
- 深度优先算法,图的遍历
- 深度优先遍历算法的非递归
- 图的深度优先遍历算法
- 四、图的深度优先搜索算法
- 深度优先搜索算法的应用
- 图的深度优先搜索算法DFS
- 深度优先搜索算法的通用解法
- kohana
- C# 调整系统时间
- 超经典的 Java 入门之 HelloWorld 程序
- (DOS入门) 超级菜鸟如何在1小时内玩转DOS
- 发几个字玩玩
- 深度优先算法 演示,还有不完善的地方
- 哈哈哈,我来了
- OEM Win7 Cert&SLIC文件 12种8个品牌和32种SLIC文件
- jsp + servlet +jxl 实现 export excel
- 研究生应当具备的三种基本技能
- 5800xm使用有感
- C#编程利器之四:委托与事件(Delegate and event) (下)
- 获取当前GPRS接入状态
- asdfasf