- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正试图在火车时刻表中找到一种方法,并获取换乘站和线路编号。但是当你必须换乘火车时,我遇到了一些麻烦。首先是时间表数据库中的代码和(长)片段。
%Linie 3A (Richtung Wiler Mann)
% lineNr, A,B,time(minute)
verbindung('3A',[pirnaischer, platz], [albertplatz], [18, 28, 38, 48, 58, 08]).
verbindung('3A',[albertplatz], [bahnhof, neustadt], [23, 33, 43, 53, 03, 13]).
verbindung('3A',[bahnhof, neustadt], [hansastraße], [25, 35, 45, 55, 05, 15]).
verbindung('3A',[hansastraße], [liststraße], [26, 36, 46, 56, 06, 16]).
verbindung('3A',[liststraße], [trachenberger, platz], [30, 40, 50, 00, 10, 20]).
verbindung('3A',[trachenberger, platz], [hubertusplatz], [33, 43, 53, 03, 13, 23]).
verbindung('3A',[hubertusplatz], [wilder, mann], [35, 45, 55, 05, 15, 25]).
verbindung('3A',[wilder, mann], [xxx1], [38, 48, 58, 08, 18, 28]).
%xxx ist hier damit man auch die ankuftszeiten an der Enthaltestelle angeben kann.
%Linie 3B = Linie 3 Richtung coschütz
verbindung('3B',[wilder, mann],[hubertusplatz], [04, 14, 24, 34, 44, 54]).
verbindung('3B',[hubertusplatz],[trachenberger, platz], [06, 16, 26, 36, 46, 56]).
verbindung('3B',[trachenberger, platz],[liststraße], [08, 18, 28, 38, 48, 58]).
verbindung('3B',[liststraße],[hansastraße], [11, 21, 31, 41, 51, 01]).
verbindung('3B',[hansastraße], [bahnhof, neustadt], [14, 24, 34, 44, 54, 04]).
verbindung('3B',[bahnhof, neustadt], [albertplatz],[16, 26, 36, 46, 56, 06]).
verbindung('3B',[albertplatz], [pirnaischer, platz], [18, 28, 38, 48, 58, 08]).
verbindung('3B',[pirnaischer, platz], [xxx2], [23, 33, 43, 53, 03, 13]).
%Linie 1 (Richtung leutewitz)
verbindung('1A',[pirnaischer, platz],[postplatz],[31,41,51,01,11,21]).
verbindung('1A',[postplatz],[bahnhof, mitte],[34,44,54,04,14,24]).
verbindung('1A',[bahnhof, mitte],[waltherstraße],[38,48,58,08,18,28]).
verbindung('1A',[waltherstraße],[flügelweg],[42,52,02,12,22,32]).
verbindung('1A',[flügelweg],[gottfried-keller-straße],[45,55,05,15,25,35]).
verbindung('1A',[gottfried-keller-straße],[leutewitz],[48,58,08,18,28,38]).
verbindung('1A',[leutewitz],[xxx3],[50,00,10,20,30,40]).
%Linie 1 (Richtung prohlis, schleife)
verbindung('1B',[leutewitz],[gottfried-keller-straße],[04,14,24,34,44,54]).
verbindung('1B',[gottfried-keller-straße],[flügelweg],[06,16,26,36,46,56]).
verbindung('1B',[flügelweg],[waltherstraße],[09,19,29,39,49,59]).
verbindung('1B',[waltherstraße],[bahnhof, mitte],[12,22,32,42,52,02]).
verbindung('1B',[bahnhof, mitte],[postplatz],[17,27,37,47,57,07]).
verbindung('1B',[postplatz],[altmarkt],[21,31,41,51,01,11]).
verbindung('1B',[altmarkt],[pirnaischer, platz],[22,32,42,52,02,12]).
verbindung('1B',[pirnaischer, platz],[xxx4],[24,34,44,54,04,14]).
%Linie94
verbindung('94A',[postplatz],[bahnhof, mitte],[07, 27, 47]).
verbindung('94A',[bahnhof, mitte],[krankenhaus, friedrichstadt],[11, 31, 51]).
verbindung('94A',[krankenhaus, friedrichstadt],[waltherstraße],[14, 34, 54]).
verbindung('94A',[waltherstraße],[flügelweg],[17, 37, 57]).
verbindung('94A',[flügelweg],[gottfried-geller-straße],[20, 40, 50]).
verbindung('94A',[gottfried-keller-straße],[zschonergrundstraße],[23, 43, 03]).
verbindung('94A',[zschonergrundstraße],[am, urnenfeld],[27, 47, 07]).
verbindung('94A',[am, urnenfeld],[ludwigstraße],[32, 52, 12]).
verbindung('94A',[ludwigstraße],[erna-berger-straße],[35, 55, 15]).
verbindung('94A',[erna-berger-straße],[cossebaude, bahnhof],[37, 57, 17]).
verbindung('94A',[cossebaude, bahnhof],[xxx9],[38, 58, 18]).
dlDfs(Node, Goal, Path,LinienPath,UmstiegPath, LinienLimit, ReturnPath, ReturnLinie, ReturnUmstieg) :-
Node = Goal,
reverse(Path, ReturnPath),
reverse(LinienPath, ReturnLinie),
reverse(UmstiegPath, ReturnUmstieg)
;
0 =< LinienLimit,
verbindung(Linie,Node,NewNeighbor,_),
not(member(NewNeighbor,Path)),
(
(
not(member(Linie, LinienPath)), NewLinienLimit is LinienLimit - 1,
dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], [Linie|LinienPath], [Node|UmstiegPath], NewLinienLimit, ReturnPath, ReturnLinie, ReturnUmstieg)
)
;
(dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], LinienPath, UmstiegPath, LinienLimit, ReturnPath, ReturnLinie,ReturnUmstieg)
)).
idDfsLoop(Start, Goal,L, ReturnPath, ReturnLinie, ReturnUmstieg) :-
dlDfs(Start, Goal, [Start],[], [], L, ReturnPath, ReturnLinie, ReturnUmstieg)
;
L1 is L + 1,
idDfsLoop(Start, Goal, L1, ReturnPath, ReturnLinie, ReturnUmstieg).
idDfs(Start, Goal, ReturnPath, ReturnLinie, ReturnUmstieg) :-
idDfsLoop(Start, Goal, 1, ReturnPath, ReturnLinie, ReturnUmstieg),
!.
例如,如果我尝试找到从“albertplatz”到“erna-berger-straße”的路线,我必须换乘 3 次火车线路。现在,当我调用
idDfs([albertplatz], [erna-berger-straße], Path, ChangeLine,
ChangeStop).
程序应该返回
Path = [The hole Path],
ChangeLine = ['3B', '1A', '94A'],
ChangeStop[[albertplatz],[pirnaischer,platz], [...]].
但我只得到
Path = [The hole Path],
ChangeLine = ['3B', '94A'],
ChangeLine = [[albertplatz], [am, urnenfeld]].
我也不知道为什么。如果我测试从 [albertplatz] 到 [postplatz] 的路,程序会返回正确答案,可能是因为只有一个换站点。
感谢@SQB 的帮助,我解决了我的问题,这是新的工作搜索谓词
dlDfs(Goal, Goal, Path, LinienPath, CurrentLine, UmstiegPath, ReturnPath, ReturnLinie, ReturnUmstieg) :-
reverse(Path, ReturnPath),
reverse(LinienPath, ReturnLinie),
reverse(UmstiegPath, ReturnUmstieg).
dlDfs(Node, Goal, Path, LinienPath, CurrentLine, UmstiegPath, ReturnPath, ReturnLinie, ReturnUmstieg) :-
verbindung(CurrentLine, Node, NewNeighbor,_),
not(member(NewNeighbor, Path)),
(
not(member(CurrentLine, LinienPath)),
dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], [CurrentLine|LinienPath], CurrentLine, [Node|UmstiegPath], ReturnPath, ReturnLinie, ReturnUmstieg)
;
dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], LinienPath, CurrentLine, UmstiegPath, ReturnPath, ReturnLinie,ReturnUmstieg)
).
dlDfs(Node, Goal, Path, LinienPath, CurrentLine, UmstiegPath, ReturnPath, ReturnLinie, ReturnUmstieg) :-
verbindung(Linie, Node, NewNeighbor,_),
not(Linie == CurrentLine),
not(member(NewNeighbor, Path)),
not(member(Linie, LinienPath)),
dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], [Linie|LinienPath], Linie, [Node|UmstiegPath], ReturnPath, ReturnLinie, ReturnUmstieg).
最佳答案
问题出在dlDfs/9
,我擅自拆分了。
dlDfs(Goal, Goal, Path, LinienPath, UmstiegPath, _LinienLimit, ReturnPath, ReturnLinie, ReturnUmstieg) :-
reverse(Path, ReturnPath),
reverse(LinienPath, ReturnLinie),
reverse(UmstiegPath, ReturnUmstieg).
dlDfs(Node, Goal, Path, LinienPath, UmstiegPath, LinienLimit, ReturnPath, ReturnLinie, ReturnUmstieg) :-
0 =< LinienLimit,
verbindung(Linie, Node, NewNeighbor,_),
not(member(NewNeighbor, Path)),
(
not(member(Linie, LinienPath)),
NewLinienLimit is LinienLimit - 1,
dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], [Linie|LinienPath], [Node|UmstiegPath], NewLinienLimit, ReturnPath, ReturnLinie, ReturnUmstieg)
;
dlDfs(NewNeighbor, Goal, [NewNeighbor|Path], LinienPath, UmstiegPath, LinienLimit, ReturnPath, ReturnLinie,ReturnUmstieg)
).
问题出在第二个。你做了一些检查,然后你有两条路可以走。第一个是如果新的 Linie
还没有在 LinienPath
中(顺便说一下,英语和德语的有趣组合)。您减少 LinienLimit
并再次调用 dlDfs。
但是,如果失败,例如因为 LinienLimit
低于 0,则采用第二条路径,新找到的节点仍添加到路径中,但行不会添加到行列表中 — 即使它是一个新行。
我认为,您需要做的不仅仅是检查该线路是否在已占用线路列表中,而且还要检查您找到连接的线路是否是您当前乘坐的线路。
我的建议是将谓词拆分为多个子句,而不是使用分号。然后,对于 dlDfs
,您有几种情况需要定义。
一个完全不同的方法是检查你的起点在哪条线上,你的目标在哪条线上,以及如何连接这些线。
人类就是这样做的:“啊,是的,Erna Bergerstraße 在 94 号线,我现在在 3 号线的 Albertplatz,让我们看看,这些线路没有连接,但我可以在 Pirnaischer Platz 换到上 1 号线,然后在 Ludwigstrasse 换上 94 号线去 Erna Bergerstraße。”
另外,您有一次拼错了“gottfried-keller-straße”。
关于algorithm - 在火车时刻表中找到一条路,并使用 line-nr 获取换乘站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37858447/
当前问题陈述的输入是 - 输入.txt #START_OF_TEST_CASES #DATA key1:VA1 key2:VA2 key3:VA3 key4:VA4 key5:VA5 #DEND #E
编辑:添加了 PDO 调用。 这是实际的错误: Notice: Object of class PDOStatement could not be converted to int in Unknow
“git diff --stat”和“git log --stat”显示如下输出: $ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56
我有一个具有以下格式的输入文件:安大略省:布兰普顿:北纬 43° 41':西经 79° 45'安大略省:多伦多:北纬 43° 39':西经 79° 23'魁北克省:蒙特利尔:北纬 45° 30':西经
空白行仅包含\n或\r\n或\r。 tempfile = open(file,"r") for id,line in enumerate(tempfile): if(line != "\n"
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
有一个while read循环: while read line; do grep "^$line" file1 done < target 我应该使用 "^$line" 来获得正确答案。我想
我有一个我无法解决的 numpy 问题。我有填充 0 和 1 的 3D 数组 (x,y,z)。例如,z 轴上的一个切片: array([[1, 0, 1, 0, 1, 1, 0, 0],
作为临时方法,我使用 .txt 文件来存储程序的某些变量。写入与 fs.appendFile 完美配合,但考虑到它的大小,使用 fs.readFile 读取不合适 - 我想得到某一行 来自文件,以及
我试图找到一种通过R studio进行调试的方法,但是我发现的所有解决方案都无法真正起作用。 1.)CTRL + enter:有效,但不会通过循环的每次迭代,而只能执行一次。 2.)添加“browse
在我的应用程序中,我的 EditText 左侧有行号 - 到目前为止一切都很好,行号与 EditText 的行完全对齐。 问题是,如果用户更改 EditText 的文本大小,则行号无法正确对齐。所以我
通过使用 + 的参数调用它,我可以使 vim 将光标定位在文件的最后一行。 : vi + myfile # "+" = go to last line of file 我怎样才能做到
我已经在文件中写入了这样的数据(某种) {:a 25 :b 28} {:a 2 :b 50} ... 我想要这些 map 的惰性序列。 大约有 4000 万行。我也可以写 10000 的 block
我在文本区域中发现了一个奇怪的错误(?)... 比如说,有一个 使用多行文本(用户粘贴的文本或预设文本无关紧要,两者都经过测试)。 我想从 中获取文本并替换 \n与其他东西......结果是,.re
我需要一个新行,这样我就可以在 PFD 中看到一个格式,我尝试添加一个页面宽度但它没有用,我用另一个东西/n 也没有用。这是我的代码。我可以手动添加格式,因为我需要显示从数据库中获取的信息,并且我在一
我正在尝试编写一个 Java 程序,它将大量 GPS 坐标捕捉到线形文件(道路网络),并且不仅返回新坐标,还返回捕捉到的线段的唯一标识符。该标识符是否是 FID、其他语言中使用的“索引”(即,其中 1
你好,我正在努力处理 JavaScript/NodeJS 中的数组。 基本上,这是我的代码: let arr = new Array(); arr = { "Username" : var1,
我正在学习 matplotlib 的基本教程,我正在处理的示例代码是: import numpy as np import matplotlib.pylab as plt x=[1,2,3,4] y=
所以,假设我有一个包含 20 行的文本文件,每行都有不同的文本。我希望能够有一个包含第一行的字符串,但是当我执行 NextLine(); 时我希望它成为下一行。我试过了,但它似乎不起作用: strin
我是一名优秀的程序员,十分优秀!