js实现最短路经问题

来源:互联网 发布:杰克棋牌透视软件 编辑:程序博客网 时间:2024/05/01 02:04
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);
原创粉丝点击