【发布时间】:2013-04-13 17:20:20
【问题描述】:
问题:
在英文维基百科中找到两篇文章之间的最短路径。如果存在文章 C(i) 并且文章 A 中存在指向文章 C(1) 的链接,文章 C(1) 中存在指向文章 C(2) 的链接,则文章 A 和 B 之间存在路径,.. ., 在文章 C(n) 中是指向文章 B 的链接
我正在使用 Python。维基百科文章下载地址:
- http://en.wikipedia.org/wiki/Nazwa_artykułu
- http://en.wikipedia.org/w/index.php?title?Nazwa_artykułu&printable=yes
- 维基百科 API
我已经编辑了我的源代码,但是当我将这些文章包含在代码中时它仍然不起作用,谁能告诉我我在这里搞砸了什么?
这是我的代码:
import urllib2
import re
import xml.etree.ElementTree as ET
text = ET.fromstring(F_D.text.encode('UTF-8'))
text = ET.fromstring(P.text.encode('UTF-8'))
F_D=requests.get('http://en.wikipedia.org/wiki/Ant_colony_optimization_algorithms')
P=requests.get('http://en.wikipedia.org/wiki/Wikipedia:Unusual_articles')
links = text.findall('.//*[@id=”mw-content-text”]/p/a')
links=E_D
E_D = graph_dict
E_D[start] = 0
for vertex in E_D:
F_D[vertex] = E_D[vertex]
if vertex == end: break
for edge in graph[vertex]:
path_distance = F_D[vertex] + graph[vertex][edge]
if edge in F_D:
if path_distance < F_D[edge]:
#raise ValueError,
elif edge not in E_D or path_distance < E_D[edge]:
E_D[edge] = path_distance
[edge] = vertex
return (F_D,P)
def Shortest_Path(graph,start,end):
F_D,P = D_Algorithm(graph,start,end)
path = []
while 1:
path.append(end)
if end == start: break
end = P[end]
path.reverse()
return path
【问题讨论】:
-
我很想知道你为什么要这样做? :)
-
删除了“Windows”标签,因为我在问题中没有看到任何特定于 Windows 的内容。如果这是我的错误,请退回。
-
您可以尝试使用 Wikipedia 上的“这里的链接”来查找页面的所有传入链接。这将使问题更容易解决。
-
正如@AndersonGreen 建议的那样,使用入站链接并执行简单的 BFS。除非您对边缘有加权函数(我看不到也无法想象您会这样做),否则您可以考虑所有边缘具有相同的权重,这使得所有最短路径在相同的 BFS 距离处发现目标从源头。
-
查看mu.netsoc.ie/wiki 了解以前做过此操作的人。它从 2008 年 3 月开始,所以数据已经过时,据我所知是用 Perl 和 C++ 编写的,但他如何解决它的描述可能很有用。