圖由邊的集合及頂點的集合組成岗仑。

如果一個圖的頂點對是有序的薪缆,則可以稱之為有向圖漾唉,反之無序圖

function Graph(v) {
    this.vertices = v; //頂點
    this.edges = 0;  // 邊的數(shù)量
   //使用一個長度與圖的頂點數(shù)相同的數(shù)組來記錄頂點的數(shù)量
    this.adj = []; 
    for (var i = 0; i < this.vertices; ++i) {
      this.adj[i] = [];
      this.adj[i].push("");
    }
    //增加邊的方法
    this.addEdge = addEdge;
    // 打印所有頂點及其相鄰頂點列表的方式來顯示圖
    this.showGraph = showGraph;
    //搜索某一個頂點的所有路徑
    this.dfs = dfs;
    // 用一個數(shù)組存放所有頂點挽绩,boolean值來表示是否訪問過
    this.marked = [];
    for (var i = 0; i < this.vertices; ++i) {
          this.marked[i] = false;
    }
    // 廣度優(yōu)先搜索需要數(shù)組來保存從一個頂點到下一個頂點的所有邊
    this.edgeTo = [];
}
//當調(diào)用這個函數(shù)并傳入頂點 A 和 B 時膛壹,函數(shù)會先查找頂點 A 的鄰接表,將頂點 B 添加到列表中唉堪,然后再查找頂點 B 的鄰接表模聋,將頂點 A 加入列表。最后唠亚,這個函數(shù)會將邊數(shù)加 1链方。
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) {
    putstr(i + " -> ");
    for (var j = 0; j< this.vertices; ++j) {
        if (this.adj[i][j] != undefined)
            putstr(this.add[i][j] + ' ');
        }
        print();
    }
}

深度優(yōu)先搜索算法比較簡單:訪問一個沒有訪問過的頂點,將它標記為已訪問灶搜,再遞歸地去訪問在初始頂點的鄰接表中其他沒有訪問過的頂點祟蚀。

function dfs(v) {
    this.marked[v] = true;
    if (this.adj[v] != undefined) {
        print("Visited vertex: " + v);
    }
    for each(var w in this.adj[v]) {
        if (!this.marked[w]) {
            this.dfs(w);
        }
    }
}
// 測試 dfs() 函數(shù)的程序
g = new Graph(5);
g.addEdge(0, 1);
g.addEdge(0,2);
g.addEdge(1,3);
g.addEdge(2,4);
g.showGraph();
g.dfs(0);

以上程序的輸出結(jié)果為:
0 -> 1 2
1 -> 0 3
2 -> 0 4
3 -> 1
4 -> 2
Visited vertex: 0
Visited vertex: 1
Visited vertex: 3
Visited vertex: 2
Visited vertex: 4

廣度優(yōu)先搜索從第一個頂點開始,嘗試訪問盡可能靠近它的頂點割卖。本質(zhì)上前酿,這種搜索在圖上是逐層移動的,首先檢查最靠近第一個頂點的層鹏溯,再逐漸向下移動到離起始頂點最遠的層

function bfs(s) {
    var queue = [];
    this.marked[s] = true;
    queue.push(s); // 添加到隊尾
    while (queue.length > 0) {
        var v = queue.shift(); // 從隊首移除
        if (v == undefined) {
            print("Visisted vertex: " + v);
        }
        for each(var w in this.adj[v]) {
            if (!this.marked[w]) {
                this.edgeTo[w] = v;
                this.marked[w] = true;
                queue.push(w);
            }
        }
    } 
}

以上程序的輸出結(jié)果為:
0 -> 1 2
1 -> 0 3
2 -> 0 4
3 -> 1
4 -> 2
Visited vertex: 0
Visited vertex: 1
Visited vertex: 2
Visited vertex: 3
Visited vertex: 4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末罢维,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丙挽,更是在濱河造成了極大的恐慌肺孵,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颜阐,死亡現(xiàn)場離奇詭異平窘,居然都是意外死亡,警方通過查閱死者的電腦和手機凳怨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門瑰艘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人猿棉,你說我怎么就攤上這事磅叛。” “怎么了萨赁?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵弊琴,是天一觀的道長。 經(jīng)常有香客問我杖爽,道長敲董,這世上最難降的妖魔是什么紫皇? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮腋寨,結(jié)果婚禮上聪铺,老公的妹妹穿的比我還像新娘。我一直安慰自己萄窜,他們只是感情好铃剔,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著查刻,像睡著了一般键兜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上穗泵,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天普气,我揣著相機與錄音,去河邊找鬼佃延。 笑死现诀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的履肃。 我是一名探鬼主播仔沿,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榆浓!你這毒婦竟也來了于未?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤陡鹃,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后抖坪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體萍鲸,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年擦俐,在試婚紗的時候發(fā)現(xiàn)自己被綠了脊阴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚯瞧,死狀恐怖嘿期,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情埋合,我是刑警寧澤备徐,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站甚颂,受9級特大地震影響蜜猾,放射性物質(zhì)發(fā)生泄漏秀菱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一蹭睡、第九天 我趴在偏房一處隱蔽的房頂上張望衍菱。 院中可真熱鬧,春花似錦肩豁、人聲如沸脊串。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽琼锋。三九已至,卻和暖如春循捺,著一層夾襖步出監(jiān)牢的瞬間斩例,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工从橘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留念赶,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓恰力,卻偏偏與公主長得像叉谜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子踩萎,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容