Javascript圖算法

現(xiàn)實(shí)世界中很多事物都是以網(wǎng)絡(luò)形式組織的,例如人們的社交網(wǎng)絡(luò),道路交通網(wǎng)絡(luò)等。社交媒體的發(fā)達(dá)使網(wǎng)絡(luò)的研究更加火熱。
網(wǎng)絡(luò)在計(jì)算機(jī)中以圖graph來表示,具體的表示方法將很大程度上決定圖的各類算法的效率。
圖由邊edge和頂點(diǎn)vertex組成,一條邊連接兩個(gè)頂點(diǎn),根據(jù)邊是否有方向可以將圖分為無向圖和有向圖。
圖中的一條路徑path經(jīng)過多個(gè)頂點(diǎn),路徑中可以重復(fù)經(jīng)過一個(gè)頂點(diǎn)兩次或以上,稱為環(huán)路loop。
圖中兩個(gè)頂點(diǎn)存在路徑稱為連通。一個(gè)圖是強(qiáng)練通(strongly connected),如果它的任意兩個(gè)頂點(diǎn)都連通。


頂點(diǎn)的js定義

function Vertex(label) {
   this.label = label;
}

構(gòu)造一個(gè)Graph
function Graph(v) {
    this.vertices = v;
    this.edges = 0;
    this.adj = []; 
    // 訪問標(biāo)記
    this.marked = [];
    for (var i = 0; i < this.vertices; ++i)  {
        this.adj[i] = [ ];
        this.adj[i].push("");
        this.marked[i] = false;
    }
    this.addEdge = addEdge;
    this.toString = toString;
}

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

function show() {
    for (var i = 0; i< this.vertices; i++) {
        print(i+" -> ");
        for (var j = 0; j < this.adj[i].length; ++j) {
            print(this.adj[i][j]);
        }
    }
}

function dfs(v) {
    this.marked[v] = true;
    print("Visit vertex: " + v);
    for each (var w in this.adj[v]) {
        if (!this.marked[w]) {
            this.dfs(w);
        }
    }
}

function bfs(v) {
    var queue = [];
    queue.push(v);
    while (queue.length > 0) {
        var s = queue.shift();
        print("Visit vertex: " + s);
        this.marked[s] = true;
        for each (var w in this.adj[s]) {
            if (!this.marked[w]) {
                queue.push(w);
            }    
        }
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • https://zh.visualgo.net/graphds 淺談圖形結(jié)構(gòu)https://zh.visualgo...
    狼之獨(dú)步閱讀 4,424評(píng)論 0 0
  • 圖是一種比線性表和樹更復(fù)雜的數(shù)據(jù)結(jié)構(gòu),在圖中,結(jié)點(diǎn)之間的關(guān)系是任意的,任意兩個(gè)數(shù)據(jù)元素之間都可能相關(guān)。圖是一種多對(duì)...
    Alent閱讀 2,424評(píng)論 1 22
  • 第一章 緒論 什么是數(shù)據(jù)結(jié)構(gòu)? 數(shù)據(jù)結(jié)構(gòu)的定義:數(shù)據(jù)結(jié)構(gòu)是相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的集合。 第二章...
    SeanCheney閱讀 6,004評(píng)論 0 19
  • 一些概念 數(shù)據(jù)結(jié)構(gòu)就是研究數(shù)據(jù)的邏輯結(jié)構(gòu)和物理結(jié)構(gòu)以及它們之間相互關(guān)系,并對(duì)這種結(jié)構(gòu)定義相應(yīng)的運(yùn)算,而且確保經(jīng)過這...
    Winterfell_Z閱讀 6,605評(píng)論 0 13
  • 一、錯(cuò)題背后的原因 這幾天在研究今年的省考中考卷,有些題目錯(cuò)得很令人匪夷所思。于是我去初三,問今年考試的孩子們...
    sunflower80閱讀 752評(píng)論 0 0

友情鏈接更多精彩內(nèi)容