数据结构与算法的JavaScript描述——图和图算法

数据结构与算法的JavaScript描述——图和图算法

说明:以下部分均为《数据结构与算法的JavaScript描述》学习内容及笔记

1、构建图

function Graph(v){
    this.vertices=v;
    this.edges=0;
    this.adj=[];
    for(var i=0;i<this.vertices;i++){
        this.adj[i]=[];
        this.adj[i].push("");
    }
    this.addEdge=addEdge;
    this.toString=toString;
}

function addEdge(v, w){
    this.adj[v].push(w);
    this.adj[w].push(v);
    this.edges++;
}

function showGraph(){
    for(var i=0;i<this.vertices;i++){
        print(i + "->");
        for(var j=0;j<this.vertices;j++){
            if(this.adj[i][j]!=undefined){
                console.log(this.adj[i][j] + " ");
            }
        }
    }
}

2、搜索图

2.1 深度优先遍历
function Graph(v){
    this.vertices=v;
    this.edges=0;
    this.adj=[];
    for(var i=0;i<this.vertices;i++){
        this.adj[i]=[];
        this.adj[i].push("");
    }

    //新添加,标记是否被访问过
    this.mark=[];
    for(var i=0;i<this.vertices;i++){
        this.mark[i]=false;
    }

    this.addEdge=addEdge;
    this.toString=toString;
}

function dfs(v){
    var that=this;
    this.mark[v]=true;
    if(this.adj[v]!=undefined){
        console.log("访问:" + v);
    }
    this.adj[v].forEach(function(w){
        if(!that.mark[w]){
            that.dfs(w);
        }
    });
}
2.2 广度优先遍历
function bfs(v){
    var that=this;
    var queue=[];
    this.mark[v]=true;
    queue.push(v);
    while(queue.length>0){
        var s = queue.shift();
        console.log("访问:" + s);
        this.adj[s].forEach(function(w){
            if(!that.mark[w]){
                that.mark[w]=true;
                queue.push(w);
            }
        });
    }
}

猜你喜欢

转载自blog.csdn.net/liyuxing6639801/article/details/79836594