zoukankan      html  css  js  c++  java
  • JavaScript数据结构-19.拓扑排序

      1 <!DOCTYPE html>
      2 <html>
      3     <head>
      4         <meta charset="UTF-8">
      5         <title>拓扑排序</title>
      6     </head>
      7     <body>
      8         <script>
      9             function topSort(){
     10                 var stack = [];
     11                 var visited = [];
     12                 for(var i=0;i<this.vertices;i++){
     13                     visited[i] = false;
     14                 }
     15                 for(var i = 0;i<this.vertices;i++){
     16                     if(visited[i] == false){
     17                         this.topSortHelper(i,visited,stack);                        
     18                     }
     19                 }
     20                 for(var i = 0;i<stack.length;i++){
     21                     if(stack[i] != undefined && stack[i] != false){
     22                         console.log(this.vertexList[stack[i]]);
     23                     }
     24                 }
     25             }
     26             function topSortHelper(v,visited,stack){
     27                 visited[v] = true;
     28                 for (var k in this.adj[v]){
     29                     var w = this.adj[v][k];
     30                     if(!visited[w]){
     31                         this.topSortHelper(visited[w],visited,stack);
     32                     }
     33                 }
     34                 stack.push(v);
     35             }
     36             
     37             function addEdge(v,w){
     38                 this.adj[w].push(v);
     39                 this.adj[v].push(w);
     40                 this.edges++;
     41             }
     42             
     43             function showGraph(){
     44                 var visited = [];
     45                 for(var i = 0;i<this.vertices;i++){
     46                     console.log(this.vertexList[i]+"->");
     47                     visited.push(this.vertexList[i]);
     48                     for(var j = 0;j < this.vertices;j++){
     49                         if(this.adj[i][j] != undefined){
     50                             if(visited.indexOf(this.vertexList[j]) < 0){
     51                                 console.log(this.vertexList[j]+" ");
     52                             }
     53                         }
     54                     }
     55                     visited.pop();
     56                 }
     57             }
     58             
     59             //深度优先搜索
     60             function dfs(v){
     61                 this.marked[v] = true;
     62                 //输出一下 
     63                 if(this.adj[v] != undefined){
     64                     console.log("已访问 :"+v);
     65                 }
     66                for(var i = 0;i<this.adj[v].length;i++){
     67                        var w = this.adj[v][i];
     68                        if(!this.marked[w]){
     69                         this.dfs(w);
     70                       }
     71                 }
     72             }
     73             
     74             //广度优先
     75             function bfs(s){
     76                 var queue = [];
     77                 this.marked[s] = true;
     78                 queue.unshift(s);
     79                 while(queue.length > 0){
     80                     var v = queue.shift();
     81                     if(typeof(v) != 'string'){
     82                         console.log("已访问 :"+v);
     83                     }
     84                     for(var k in this.adj[v]){            
     85                         var w = this.adj[v][k];
     86                         if(!this.marked[w]){
     87                             this.edgeTo[w] = v;
     88                             this.marked[w] = true;
     89                             queue.unshift(w);
     90                         }
     91                     }
     92                 }        
     93             }
     94         
     95             function pathTo(v){
     96                 var source = 0;
     97                 if(!this.hasPathTo(v)){
     98                     return undefined;
     99                 }
    100                 var path = [];
    101                 for(var i = v;i != source;i=this.edgeTo[i]){
    102                     path.push(i);
    103                 }
    104                 path.push(source);
    105                 return path;
    106             }
    107             function hasPathTo(v){
    108                 return this.marked[v];
    109             }
    110             function Graph(v){
    111                 this.vertices = v;
    112                 this.vertexList = [];
    113                 this.edges = 0;
    114                 this.adj = [];
    115                 for(var i=0;i<this.vertices;i++){
    116                     this.adj[i] = [];
    117                 }
    118                 this.addEdge = addEdge;
    119                 this.showGraph = showGraph;
    120                 this.dfs = dfs;
    121                 this.edgeTo = [];
    122                 this.marked = [];
    123                 for(var i=0;i<this.vertices;i++){
    124                     this.marked[i] = false;
    125                 }
    126                 this.bfs = bfs;
    127                 this.hasPathTo = hasPathTo;
    128                 this.topSortHelper = topSortHelper;
    129                 this.topSort = topSort;
    130             }
    131             
    132             
    133             //测试
    134             var obj = new Graph(6);
    135             obj.addEdge(1,2);
    136             obj.addEdge(2,5);
    137             obj.addEdge(1,3);
    138             obj.addEdge(1,4);
    139             obj.addEdge(0,1);
    140             obj.vertexList = ["css1","css2","data structures","javascript","operating system","html"];
    141             obj.showGraph();
    142             obj.topSort();
    143         </script>
    144     </body>
    145 </html>
  • 相关阅读:
    MySQL数据库中的delete语句
    记录Jmeter集成Jenkins运行Ant做接口监听
    测试数据随机生成器(离线)
    python正则表达式
    字典、数据结构化
    python复制、浅拷贝、深拷贝
    python-list:列表-元组-字符串
    自动部署shell(结合Jenkins)
    linux问题记录
    Python操作excel
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/7191939.html
Copyright © 2011-2022 走看看