引言
利用图,可以对生活中很多系统进行建模。比如交通流量,顶点表示道路交叉点,边表示街道,边的权值可以表示限速信息等。通过一定算法可得到最优路线巴拉巴拉······除此外还有很多很多系统可以通过图来建模,只要你敢想,just do it.
代码不会骗人,结果就是证据。
对以下图进行构建,目前暂不考虑权。要发展,首先得有图啊啊啊啊················
构建
var g= new Graph(5);
g.addEdge(0,1);
g.addEdge(0,2);
g.addEdge(0,4);
g.addEdge(1,4);
g.addEdge(1,3);
g.addEdge(3,4);
g.showGraph();
/**
* 构建图类
* parameters:vertices 顶点数
* edges 边数
* adj 存储相邻顶点的数组(邻接表数组,一个二维数组,如adj[1]表示存储顶点1的邻接表)
* function:addEdge 添加相邻顶点
**/
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.showGraph = showGraph;
}
/**
* 添加相邻顶点v,w
* 在adj[v](v顶点的邻接表里添加w)
* 相应的在adj[w](w顶点的邻接表里添加v)
* 两个顶点建立了连接关系,则全图将增加一条边
**/
function addEdge(v, w) {
this.adj[v].push(w);
this.adj[w].push(v);
this.edges++;
}
/**
*显示图
**/
function showGraph(){
var str=[];
for(var i = 0; i < this.vertices; i++){
str.push('\n'+i+'->');
for(var j = 0; j < this.vertices; j++){
if(this.adj[i][j]!=undefined){
str.push(this.adj[i][j]);
}
}
}
console.log(str.join());
}