[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我勒个去,这就是一个草...马



                                                                                   ,,,,,,,,,,,,,,,,,,,,,,,,.
                                                                                  Gr;.sr.rr.rr.rr.rs,;s:,sr
                                                                                 S@                        
                                                                                 r@                        
                                                                                 r@                        
                                                                                 r@                        
                                                                                 r@                        
                                                                                 r@                        
                                                                                 r@                        
                                                                                 r@                        
                                                                                 ;B                        
                              ..      .             ..  .                        S@                        
                         .@#@@BH@@A#@#A@@BB@@A#@#A@@@@@MH@#H@#A@#A@#A@@A@@@@@@BA#@@;                        
                        B@s                                                      ;@#@:                     
                      S@A                                                           ;@@                     
                    @                                                               3@S                  
                   @@                                                                   @r                  
                 3@X                                                                    @s                  
               ;@@                                                                      @r                  
             ,#@,                                                                       @s                  
            H@r                                     .                                   @r                  
          i@B                                       @A                          .#i     @s                  
        :@@                                         @B                        s@@@@     @;                  
       #r:                        .. . .. .  ... .; @@   ..  ...  ...      i@@#: r@  .  @5                  
     5@3                     MH3A3hAGAh3A9G&GA99&&@h@@rSX&&X29Ah229&h2ssH@@@#r,;;M@rX952@M5hi               
   :@X                       #                      GS                rMMr       ;@                        
  @@2 ,;;:          ;ssrrsr:,@2:;;;;;:;;:;;:;;:;;;r:@@,:;:;;;;:;;;;;A@9.         r#                        
  3is2&2r;          rhhS23r2@HXSXSS35iX2i22i2Xi22XA2@@rSXiSX2Xi5X5XS;            s#                        
                          ;2.                       92                           i@                        
                        ;Hi                         H3                           s@                        
                      ,#X                           &5                           5@                        
                     AB.                            @&                           :r                        
                   S#;                              #A                                                      
                 ;M2                                @H                                                      
               .&H,                                 ::                                                      
              5#r                                                                                          
            r@5                                                                                             
          ,MA                                                                                               
        .A#:                                                                                                
       .;.                                                                                                  


2

评分人数

TOP

TOP

我在看此题时写了一个步骤:

首先找出节点站  一级 二级 三级。。。同时将线路和站点均设为变量

1、先打本线路上是不是有这个站 有a-b 没有向下

2、确定目的站在哪条或哪几条线上

3、查找本线路上哪个站在这些线路上 列出所有a-c-b 没有向下

4、查找本线路上所有的节点站 找出这些节点站所在线路的其他节点站是否在目的站所在线路上 a-c-d-b 再没有(四次换乘)脑子不够用了。。。
***共同提高***

TOP

用坐标如何保证站点之间遵循严格的几何形呢?看上去是正方形的路线难免不会出现上底下底站点数不一样的情况。

现在的想法是双向递归,从两点开始层层遍历(就像小时候走复杂的迷宫一样),直到可行的路线相互碰撞,不过说起来容易,做起来...

TOP

也考虑过坐标,可是批处理不知道如何弄啊
现在是获取出发点的车次到目的地的车次,只要在交接点中查询就可以了
call 在语句块中递归,能最终找到目的,但无法正确计算途中经过的节点,抓狂中。。
技术问题请到论坛发帖求助!

TOP

plp数学强人制作一个数学模型来计算吧。。。

个人是有心无力哦。。。
***共同提高***

TOP

个人感觉制成图,将站标为坐标,然后根据两点间的直线穿过的线路来算可能会容易点。。。。

有图有真相:
***共同提高***

TOP

代码是按层次计算的,找到匹配的就退出了。 所以层次多的不包括在内。
但是把  if !路线!.==. goto :loop
改成  set /a n+=1&if !n! lss 10 goto :loop

即可得到更多次换乘的结果。

TOP

本帖最后由 caruko 于 2011-6-5 21:35 编辑

我这个代码 是只把换乘点写进去。
然后根据这个路线去计算,并找到最短路径。
不是最终结果。

对了...前次提交的有个BUG,把 !路线! 写成 !线路! 了。
现在正常了。

运行结果如下:
  1. 请输入起点站-终点站:华强路 岗厦北
  2. 路线: "华强路 世界之窗 岗厦北"  "华强路 大剧院 岗厦北"
  3. 请输入起点站-终点站:岗厦 岗厦北
  4. 路线:"岗厦 岗厦北"
  5. 可能是字符替换导致出问题了 =。=
复制代码

TOP

输入 华强路 岗厦北
路线: "华强路 世界之窗 岗厦北"  "华强路 大剧院 岗厦北"
少了条 "华强路 世界之窗 岗厦北 会展中心 市民中心"

输入 岗厦 岗厦北
路线:"岗厦 岗厦北" "岗厦 世界之窗 岗厦北"  "岗厦 大剧院 岗厦北"  "岗厦 世界之窗
岗厦北"  "岗厦 大剧院 岗厦北"  "岗厦 市民中心 岗厦北"  "岗厦 黄贝岭 岗厦北"
"岗厦 岗厦北" 少了两站
"岗厦 市民中心 岗厦北" 少了"市民中心"
"岗厦 黄贝岭 岗厦北" 少了"大剧院"
技术问题请到论坛发帖求助!

TOP

本帖最后由 caruko 于 2011-6-5 21:17 编辑

计算线路做出来了,有空补上计算站点数的。  文本是 第5行 的 dt.txt
  1. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  2. set /p input=请输入起点站-终点站:
  3. for /f "tokens=1,2 delims=-, " %%a in ("!input!") do set "start=%%a"&set "end=%%b"
  4. ::取得交点。
  5. for /f "tokens=1,2* delims=/ " %%a in (dt.txt) do (
  6.     set "xl_%%a=%%c"
  7.     for %%i in (%%c) do set /a #%%i+=1
  8. )
  9. for /f "tokens=1,2 delims=#=" %%a in ('set #') do (
  10.     if !#%%a! geq 2 set "dd_list=!dd_list! %%a"
  11.     set "#%%a="
  12. )
  13. ::取得每个交点可到达的线路。
  14. for /f "tokens=2,3 delims=_=" %%a in ('set xl_') do (
  15.     set "str=%%b"
  16.     for /f "tokens=1,2" %%x in ("!start! !end!") do (
  17.         if not "!str:%%x=!"=="!str!" set "start_xl=!start_xl! %%a"
  18.         if not "!str:%%y=!"=="!str!" set "end_xl=!end_xl! %%a"
  19.     )
  20.     for %%D in (!dd_list!) do (
  21.         if not "!str:%%D=!"=="!str!" (
  22.             set "%%x=!%%x:%%D=@%%D!"
  23.             set "@%%D=!@%%D! %%a "
  24. )))
  25. ::检查是否可直达
  26. for %%a in (!start_xl!) do for %%b in (!end_xl!) do if %%a==%%b set "路线=^"!start! !end!^""
  27. if not "!路线!"=="" goto :metic
  28. ::计算换乘路线
  29. set "查询表=^"!start!=!start_xl!^""
  30. set "剩余交点表=!dd_list!"
  31. :loop
  32. for %%i in (!查询表!) do (
  33. for /f "tokens=1* delims==" %%A in ("%%~i") do (
  34. for %%a in (%%B) do (
  35.     for %%b in (!剩余交点表!) do (
  36.         for %%c in (!@%%b!) do (
  37.             if %%a==%%c (
  38.                 set "转车点=!转车点! %%b"
  39.                 set "剩余查询表=!剩余查询表! ^"%%A %%b=!@%%b:%%c=!^""
  40.                 for %%d in (!end_xl!) do for %%e in (!@%%b!) do if %%e==%%d (
  41.                     set "路线=!路线! ^"%%A %%b !end!^" "
  42. )))))))
  43. for %%a in (!剩余交点表!) do for %%b in (!转车点!) do set "剩余交点表=!剩余交点表:%%b=!"
  44. set "查询表=!剩余查询表!"
  45. set "剩余查询表="
  46. if !路线!.==. goto :loop
  47. ::计算站点
  48. :metic
  49. echo,路线:!路线!
  50. goto :eof
复制代码
2

评分人数

TOP

没去过北京,我说怎么站名这么眼熟,明明是深圳嘛。

我跟楼上想法类似,把相交站点作为变量名,保存该线路上的站点名。

TOP

我以前写的那个公交线路查询在这里
批处理版公交线路信息查询器[2006-11-10](http://bbs.bathome.net/viewthread.php?tid=2141
rem ========== 查询换乘方案 ==========
:: 换乘线路只能查到匹配的第一条,可能不是最短线路

所以,那个方案不适用于本题
楼主的题目用批处理也是可以做到的
目前只有一个比较模糊的思路
还有待验证:
首先,用批处理把所有线路的站点数量计算出来并加以保存
然后,把所有线路的所有相交站点罗列出来,并记录下该站点在这些线路上位于第几站,剩余多少站
每两条线路为一对数据,保存在同一行上
然后以起止站点为关键词在配置文件和临时文件中查找
起始站点往前搜索,碰到第一个相交站点暂停下来
终止站点往后回溯,碰到第一个相交站点暂停下来
然后,再以这两个站点继续重复上一步骤
不过需要加上一些判断
总之,就是两头往中间碰
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

本帖最后由 hanyeguxing 于 2011-6-4 17:44 编辑

个人观点:
第一次运行时,生成辅助文本,该文本枚举所有可能线路,包含换乘(换乘点前加#,站间用-)。
然后每次查询运行时直接查询此辅助文件,直接统计#和-的个数。
这样做,只有第一次运行会慢,以后都会很快。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

好难啊,考虑到转三趟车就太复杂了,还要计算经过的站数...
只会findstr的路过打酱油

TOP

返回列表