posts - 22,comments - 35,trackbacks - 0
          < html >< head >< title > use?A * ?to?find?path </ title ></ head >
          < body?style = " margin:0px " >
          < script >
          /*
          written?by?hjjboy
          email:tianmashuangyi@163.com
          qq:156809986
          */
          var ?closelist = new ?Array(),openlist = new ?Array();
          var ?gw = 10 ,gh = 10 ,gwh = 14 ;
          var ?p_start = new ?Array( 2 ),p_end = new ?Array( 2 );
          var ?s_path,n_path = "" ;
          var ?num,bg,flag = 0 ;
          var ?w = 30 ,h = 20 ;
          function ?GetRound(pos){
          ??
          var ?a = new ?Array();
          ??a[
          0 ] = (pos[ 0 ] + 1 ) + " , " + (pos[ 1 ] - 1 );
          ??a[
          1 ] = (pos[ 0 ] + 1 ) + " , " + pos[ 1 ];
          ??a[
          2 ] = (pos[ 0 ] + 1 ) + " , " + (pos[ 1 ] + 1 );
          ??a[
          3 ] = pos[ 0 ] + " , " + (pos[ 1 ] + 1 );
          ??a[
          4 ] = (pos[ 0 ] - 1 ) + " , " + (pos[ 1 ] + 1 );
          ??a[
          5 ] = (pos[ 0 ] - 1 ) + " , " + pos[ 1 ];
          ??a[
          6 ] = (pos[ 0 ] - 1 ) + " , " + (pos[ 1 ] - 1 );
          ??a[
          7 ] = pos[ 0 ] + " , " + (pos[ 1 ] - 1 );
          ??
          return ?a;
          }
          function ?GetF(arr){
          ??
          var ?t,G,H,F;
          ??
          for ( var ?i = 0 ;i < arr.length;i ++ ){
          ????t
          = arr[i].split( " , " );
          ????t[
          0 ] = parseInt(t[ 0 ]);t[ 1 ] = parseInt(t[ 1 ]);
          ????
          if (IsOutScreen([t[ 0 ],t[ 1 ]]) || IsPass(arr[i]) || InClose([t[ 0 ],t[ 1 ]]) || IsStart([t[ 0 ],t[ 1 ]]) ||! IsInTurn([t[ 0 ],t[ 1 ]]))
          ????????
          continue ;
          ????
          if ((t[ 0 ] - s_path[ 3 ][ 0 ]) * (t[ 1 ] - s_path[ 3 ][ 1 ]) != 0 )
          ????????G
          = s_path[ 1 ] + gwh;
          ????
          else
          ????????G
          = s_path[ 1 ] + gw;
          ????
          if (InOpen([t[ 0 ],t[ 1 ]])){
          ????????
          if (G < openlist[num][ 1 ]){
          ??????????openlist[num][
          0 ] = (G + openlist[num][ 2 ]);
          ??????????openlist[num][
          1 ] = G;
          ??????????openlist[num][
          4 ] = s_path[ 3 ];
          ????????}
          ????????
          else {G = openlist[num][ 1 ];}
          ????}
          ????
          else {
          ????????H
          = (Math.abs(p_end[ 0 ] - t[ 0 ]) + Math.abs(p_end[ 1 ] - t[ 1 ])) * gw;
          ????????F
          = G + H;
          ????????arr[i]
          = new ?Array();
          ????????arr[i][
          0 ] = F;arr[i][ 1 ] = G;arr[i][ 2 ] = H;arr[i][ 3 ] = [t[ 0 ],t[ 1 ]];arr[i][ 4 ] = s_path[ 3 ];
          ????????openlist[openlist.length]
          = arr[i];
          ????}
          ????
          if (maptt.rows[t[ 1 ]].cells[t[ 0 ]].style.backgroundColor != " #cccccc " && maptt.rows[t[ 1 ]].cells[t[ 0 ]].style.backgroundColor != " #0000ff " && maptt.rows[t[ 1 ]].cells[t[ 0 ]].style.backgroundColor != " #ff0000 " && maptt.rows[t[ 1 ]].cells[t[ 0 ]].style.backgroundColor != " #00ff00 " )
          ????{
          ????????maptt.rows[t[
          1 ]].cells[t[ 0 ]].style.backgroundColor = " #FF00FF " ;
          ????????
          // maptt.rows[t[1]].cells[t[0]].innerHTML="<font?color=white>"+G+"</font>";
          ????}
          ??}
          }
          function ?IsStart(arr){
          ??
          if (arr[ 0 ] == p_start[ 0 ] && arr[ 1 ] == p_start[ 1 ])
          ????
          return ? true ;
          ??
          return ? false ;
          }
          function ?IsInTurn(arr){
          ??
          if (arr[ 0 ] > s_path[ 3 ][ 0 ]){
          ????
          if (arr[ 1 ] > s_path[ 3 ][ 1 ]){
          ????????
          if (IsPass((arr[ 0 ] - 1 ) + " , " + arr[ 1 ]) || IsPass(arr[ 0 ] + " , " + (arr[ 1 ] - 1 )))
          ??????????
          return ? false ;
          ????}
          ????
          else ? if (arr[ 1 ] < s_path[ 3 ][ 1 ]){
          ????????
          if (IsPass((arr[ 0 ] - 1 ) + " , " + arr[ 1 ]) || IsPass(arr[ 0 ] + " , " + (arr[ 1 ] + 1 )))
          ??????????
          return ? false ;
          ????}
          ??}
          ??
          else ? if (arr[ 0 ] < s_path[ 3 ][ 0 ]){
          ????
          if (arr[ 1 ] > s_path[ 3 ][ 1 ]){
          ????????
          if (IsPass((arr[ 0 ] + 1 ) + " , " + arr[ 1 ]) || IsPass(arr[ 0 ] + " , " + (arr[ 1 ] - 1 )))
          ??????????
          return ? false ;
          ????}
          ????
          else ? if (arr[ 1 ] < s_path[ 3 ][ 1 ]){
          ????????
          if (IsPass((arr[ 0 ] + 1 ) + " , " + arr[ 1 ]) || IsPass(arr[ 0 ] + " , " + (arr[ 1 ] + 1 )))
          ??????????
          return ? false ;
          ????}
          ??}
          ??
          return ? true ;
          }
          function ?IsOutScreen(arr){
          ??
          if (arr[ 0 ] < 0 || arr[ 1 ] < 0 || arr[ 0 ] > (w - 1 ) || arr[ 1 ] > (h - 1 ))
          ????
          return ? true ;
          ??
          return ? false ;
          }
          function ?InOpen(arr){
          ??
          var ?bool = false ;
          ??
          for ( var ?i = 0 ;i < openlist.length;i ++ ){
          ????
          if (arr[ 0 ] == openlist[i][ 3 ][ 0 ] && arr[ 1 ] == openlist[i][ 3 ][ 1 ]){
          ????????bool
          = true ;num = i; break ;}
          ??}
          ??
          return ?bool;
          }
          function ?InClose(arr){
          ??
          var ?bool = false ;
          ??
          for ( var ?i = 0 ;i < closelist.length;i ++ ){
          ????
          if ((arr[ 0 ] == closelist[i][ 3 ][ 0 ]) && (arr[ 1 ] == closelist[i][ 3 ][ 1 ])){
          ????????bool
          = true ; break ;}
          ??}
          ??
          return ?bool;
          }
          function ?IsPass(pos){
          ??
          if (( " ; " + n_path + " ; " ).indexOf( " ; " + pos + " ; " ) !=- 1 )
          ????
          return ? true ;
          ??
          return ? false ;
          }
          function ?Sort(arr){
          ??
          var ?temp;
          ??
          for ( var ?i = 0 ;i < arr.length;i ++ ){
          ????
          if (arr.length == 1 ) break ;
          ????
          if (arr[i][ 0 ] <= arr[i + 1 ][ 0 ]){
          ????????temp
          = arr[i];
          ????????arr[i]
          = arr[i + 1 ];
          ????????arr[i
          + 1 ] = temp;
          ????}
          ????
          if ((i + 1 ) == (arr.length - 1 ))
          ????????
          break ;
          ??}
          }
          function ?main(){
          ????GetF(GetRound(s_path[
          3 ]));
          ????Sort(openlist);
          ????s_path
          = openlist[openlist.length - 1 ];
          ????closelist[closelist.length]
          = s_path;
          ????openlist[openlist.length
          - 1 ] = null ;
          ????
          if (openlist.length == 0 ){alert( " 找不到路徑 " ); return ;}
          ????openlist.length
          = openlist.length - 1 ;
          ????
          if ((s_path[ 3 ][ 0 ] == p_end[ 0 ]) && (s_path[ 3 ][ 1 ] == p_end[ 1 ])){
          ????????getPath();
          ????}
          ????
          else {maptt.rows[s_path[ 3 ][ 1 ]].cells[s_path[ 3 ][ 0 ]].style.backgroundColor = " #00ff00 " ;setTimeout( " main() " , 100 );}
          }
          function ?getPath(){
          ??
          var ?str = "" ;
          ??
          var ?t = closelist[closelist.length - 1 ][ 4 ];
          ??
          while ( 1 ){
          ????str
          += t.join( " , " ) + " ; " ;
          ????maptt.rows[t[
          1 ]].cells[t[ 0 ]].style.backgroundColor = " #ffff00 " ;
          ????
          for ( var ?i = 0 ;i < closelist.length;i ++ ){
          ????????
          if (closelist[i][ 3 ][ 0 ] == t[ 0 ] && closelist[i][ 3 ][ 1 ] == t[ 1 ])
          ??????????t
          = closelist[i][ 4 ];
          ????}
          ????
          if (t[ 0 ] == p_start[ 0 ] && t[ 1 ] == p_start[ 1 ])
          ????????
          break ;
          ??}
          ??alert(str);
          }
          function ?setPos(){
          ??
          var ?h = (Math.abs(p_end[ 0 ] - p_start[ 0 ]) + Math.abs(p_end[ 1 ] - p_start[ 1 ])) * gw;
          ??s_path
          = [h, 0 ,h,p_start,p_start];
          }
          function ?set(id,arr){
          ??
          switch (id){
          ????
          case ? 1 :
          ????????p_start
          = arr;
          ????????maptt.rows[arr[
          1 ]].cells[arr[ 0 ]].style.backgroundColor = " #ff0000 " ; break ;
          ????
          case ? 2 :
          ????????p_end
          = arr;maptt.rows[arr[ 1 ]].cells[arr[ 0 ]].style.backgroundColor = " #0000ff " ; break ;
          ????
          case ? 3 :
          ????????n_path
          += arr.join( " , " ) + " ; " ;maptt.rows[arr[ 1 ]].cells[arr[ 0 ]].style.backgroundColor = " #cccccc " ; break ;
          ????
          default :
          ????????
          break ;
          ??}
          }
          function ?setflag(id){flag = id;}
          </ script >
          < table?id = " maptt " ?cellspacing = " 1 " ?cellpadding = " 0 " ?border = " 0 " ?bgcolor = " #000000 " >
          < script >
          for ( var ?i = 0 ;i < h;i ++ ){
          ??document.write(
          " <tr> " );
          ??
          for ( var ?j = 0 ;j < w;j ++ ){
          ????document.write('
          < td?onclick = " set(flag,['+j+','+i+']); " ?bgcolor = " #ffffff " ?width = " 20 " ?height = " 20 " ></ td > ');
          ??}
          ??document.write(
          " </tr> " );
          }
          </ script >
          </ table >
          < a?href = " javascript:setflag(1); " > 設置起點 </ a >< br >
          < a?href = 'javascript:setflag( 2 );' > 設置終點 </ a >< br >
          < a?href = 'javascript:setflag( 3 );' > 設置障礙點 </ a >< br >
          < input?type = " button " ?onclick = " setPos();main();this.disabled=true; " ?value = " find " >
          </ body >
          </ html >
          posted on 2006-06-30 11:54 kelven 閱讀(882) 評論(0)  編輯  收藏 所屬分類: JavaScript
          主站蜘蛛池模板: 诸城市| 宝山区| 图木舒克市| 长宁县| 翼城县| 全南县| 大荔县| 阜新| 岳普湖县| 阿城市| 应城市| 通城县| 休宁县| 天峻县| 汝阳县| 洛扎县| 怀远县| 宁阳县| 新乐市| 克山县| 文山县| 伊金霍洛旗| 湖口县| 丘北县| 富平县| 阳曲县| 杭锦后旗| 鲁山县| 平乐县| 太白县| 庄浪县| 沛县| 泉州市| 邵武市| 肇源县| 罗城| 乃东县| 巫山县| 望江县| 沿河| 应城市|