您的位置:首页 > Web前端 > JavaScript

js实现最短路经问题

2012-02-27 18:11 267 查看
var zhandian=new Array("北京","锦州","沈阳","长春");

var licheng=new Array("北京","锦州",16,"锦州","北京",29,"北京","沈阳",15,"沈阳","北京",21,"长春","沈阳",19,"沈阳","长春",7,"长春","锦州",27,"锦州","长春",13);

///////////////////////------------------------------------------->.>>>>>>>>

var x=licheng.length/3;

var y=3;

var lc_fd = new Array(x);

for(var i=0;i<x;i++){

lc_fd[i] = new Array(y);

}

////////////////以上批量定义

for(i=0;i<x;i++){

k=i*3;

for (j=0;j<y;j++){

lc_fd[i][j]=licheng[k];

k++;

document.write(lc_fd[i][j]);

}

document.write("<br>");

}

//-------------------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>生成二维数据组,即为“边”,每个数组长度为3,存着起点终点里程

//------------------------------------------构建邻接矩阵

var x=zhandian.length;

var y=zhandian.length;

var lj = new Array(x);

for(var i=0;i<x;i++){

lj[i] = new Array(y);

}

////////////////以上批量定义

for(i=0;i<x;i++)

{

for (j=0;j<y;j++)

{

var a=zhandian[i];

var b=zhandian[j];

if(a==b)

{

lj[i][j]=0;

//break;

}

else

{

for(k=0;k<licheng.length/3;k++)

{

if(a==lc_fd[k][0]&b==lc_fd[k][1])

{

lj[i][j]=lc_fd[k][2];

//document.write(lc_fd[k][2]);

//document.write("找到了");

break;

}

else

{

if(k==licheng.length/3-1)

{

// document.write("没找到");

lj[i][j]=9999;

}

}

}

}

// document.write(lj[i][j]);

}

// document.write("<br>");

}

//------------------------------------------------------构建邻接矩阵完成!

//-----------------------------------------------------打印邻接矩阵

for(i=0;i<4;i++){

for (j=0;j<4;j++){

document.write(lj[i][j]);

document.write(",");

}

document.write("<br>");

}

//-----------------------------------------------------打印邻接矩阵

//开始核心代码

//开始核心代码

//-------------------------定义经过的路径函数开始

var x=zhandian.length;

var y=zhandian.length;

var path = new Array(x);

for(var i=0;i<x;i++){

path[i] = new Array(y);

}

////////////////以上批量定义

for(i=0;i<x;i++){

for (j=0;j<y;j++){

path[i][j]=-1;

//document.write(path[i][j]);

}

//document.write("<br>");

}

//-------------------------定义经过的路径函数完毕

//假设起点为1,终点为4

var n=4;

var zz=0;

for(k=0;k<n;k++)

{

for(j=0;j<n;j++)

{

for(i=1;i<n;i++)

{

if(lj[i][k]!=0 & lj[k][j]!=0 &lj[i][j]!=0>(lj[i][k]+lj[k][j]))

{

lj[i][j]=lj[i][k]+lj[k][j];

path[i][j]=k;

}

else{}

}

}

}

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

{

document.write(path[i][j]);

}

document.write("<br>");

}

document.write("_________________");

//下面想写个函数输出路径,怎么也试不好

function abc(i,j)

{

var k;

k=path[i][j];

if(k==-1)(return;);

abc(i,k);

document.write("---->>");

document.write(k);

abc(k,j);

}

abc(2,3);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: