<?xml version="1.0" encoding="ISO-8859-1"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Bytes - insights</title>
		<link>http://bytes.com</link>
		<description><![CDATA[Python programming language guides, how to's and articles written by community experts.  Topics include: python interpreter, control flow, data structures, modules errors, classes, standard library, gui, databases, unit testing, object oriented, structured programming and more.]]></description>
		<language>en</language>
		<lastBuildDate>Sat, 21 Nov 2009 01:31:59 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>http://bytes.com/images/misc/rss.jpg</url>
			<title>Bytes - insights</title>
			<link>http://bytes.com</link>
		</image>
		<item>
			<title><![CDATA[Why general organisations don't use python??]]></title>
			<link>http://bytes.com/topic/python/insights/877346-why-general-organisations-dont-use-python</link>
			<pubDate>Fri, 20 Nov 2009 05:35:52 GMT</pubDate>
			<description>http://programminglanguagefaqs.blogspot.com/2009/11/why-organizations-dont-use-python.html</description>
			<content:encoded><![CDATA[<div><a href="http://programminglanguagefaqs.blogspot.com/2009/11/why-organizations-dont-use-python.html" target="_blank">http://programminglanguagefaqs.blogs...se-python.html</a></div>

]]></content:encoded>
			<category domain="http://bytes.com/topic/python/insights/">insights</category>
			<dc:creator>coders</dc:creator>
			<guid isPermaLink="true">http://bytes.com/topic/python/insights/877346-why-general-organisations-dont-use-python</guid>
		</item>
		<item>
			<title><![CDATA[Dijkstra's Algorithm for finding the shortest route]]></title>
			<link>http://bytes.com/topic/python/insights/877227-dijkstras-algorithm-finding-shortest-route</link>
			<pubDate>Wed, 18 Nov 2009 09:16:55 GMT</pubDate>
			<description><![CDATA[Hi All 
 
Here is a very simple little class for finding a shortest route on a network, following Dijkstra's Algorithm...]]></description>
			<content:encoded><![CDATA[<div>Hi All<br />
<br />
Here is a very simple little class for finding a shortest route on a network, following <a href="http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm" target="_blank">Dijkstra's Algorithm</a>:<br />
<br />
<!-- CODE -->
<div id="codeHolder" class="codeHolder" style="width: 500px;">
<div class="codeHeader">
	<span class="codeLink" onclick="Blur(this, this.parentNode.parentNode, getChildren(this),true);">Expand</span><span class="codeDivider">|</span><span class="codeLink" onclick="selectAll(this);">Select</span><span class="codeDivider">|</span><span class="codeLink" onclick="WordWrap(this);">Wrap</span><span class="codeDivider">|</span><span class="codeLink" onclick="LineNumbers(this);">Line Numbers</span>
</div>

<div class="codeContent" style="display: block; width: 500px; white-space: nowrap;">
	<ol START="1" highlight="true">

<li class="codeLI">
#!/usr/bin/env&nbsp;python</li>
<li class="codeLI">
#This&nbsp;is&nbsp;meant&nbsp;to&nbsp;solve&nbsp;a&nbsp;maze&nbsp;with&nbsp;Dijkstra's&nbsp;algorithm</li>
<li class="codeLI">
from&nbsp;numpy&nbsp;import&nbsp;inf</li>
<li class="codeLI">
from&nbsp;copy&nbsp;import&nbsp;copy</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
class&nbsp;Graph(object):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&quot;&quot;&quot;A&nbsp;graph&nbsp;object&nbsp;that&nbsp;has&nbsp;a&nbsp;set&nbsp;of&nbsp;singly&nbsp;connected,weighted,</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;directed&nbsp;edges&nbsp;and&nbsp;a&nbsp;set&nbsp;of&nbsp;ordered&nbsp;pairs.&nbsp;Can&nbsp;be&nbsp;changed&nbsp;into</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;connection&nbsp;matrix.&nbsp;Vertices&nbsp;are&nbsp;[0,1,...,n],&nbsp;and&nbsp;edges&nbsp;are&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;[[1,2,3],[2,1,1],...]&nbsp;where&nbsp;the&nbsp;first&nbsp;means&nbsp;1&nbsp;connected&nbsp;to&nbsp;2&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;weight&nbsp;3,&nbsp;and&nbsp;the&nbsp;second&nbsp;means&nbsp;2&nbsp;connected&nbsp;to&nbsp;1&nbsp;with&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;1.&quot;&quot;&quot;</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;__init__(self,vertices,edges):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.vertices=vertices</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.size=len(self.vertices)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.edges=edges</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.makematrix()</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;makematrix(self):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;creates&nbsp;connection&nbsp;matrix&quot;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.matrix=[]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(self.size):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.matrix.append([])</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;j&nbsp;in&nbsp;range(self.size):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.matrix[i].append(inf)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;edge&nbsp;in&nbsp;self.edges:</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.matrix[edge[0]][edge[1]]=edge[2]</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;dijkstra(self,startvertex,endvertex):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#set&nbsp;distances</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.distance=[]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.route=[]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;in&nbsp;range(self.size):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.distance.append(inf)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.route.append([])</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.distance[startvertex]=0</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.route[startvertex]=[startvertex,]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#set&nbsp;visited</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.visited=[]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.current=startvertex</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;self.current&lt;&gt;None:</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.checkunvisited()</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;endvertex&nbsp;in&nbsp;self.visited:&nbsp;break</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;self.distance[endvertex],self.route[endvertex]</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;checkunvisited(self):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basedist=self.distance[self.current]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.visited.append(self.current)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;vertex,dist&nbsp;in&nbsp;enumerate(self.matrix[self.current]):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;vertex&nbsp;in&nbsp;self.visited:&nbsp;continue&nbsp;#only&nbsp;check&nbsp;unvisited</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#set&nbsp;the&nbsp;distance&nbsp;to&nbsp;the&nbsp;new&nbsp;distance</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;basedist+dist&lt;self.distance[vertex]:</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.distance[vertex]=basedist+dist</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.route[vertex]=copy(self.route[self.current])</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.route[vertex].append(vertex)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#set&nbsp;next&nbsp;current&nbsp;node&nbsp;as&nbsp;one&nbsp;with&nbsp;smallest&nbsp;distance&nbsp;from&nbsp;initial</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.current=None</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mindist=inf</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;vertex,dist&nbsp;in&nbsp;enumerate(self.distance):</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;vertex&nbsp;in&nbsp;self.visited:&nbsp;continue</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;dist&lt;mindist:</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mindist=dist</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.current=vertex</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
def&nbsp;main():</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;#This&nbsp;solves&nbsp;the&nbsp;maze&nbsp;in&nbsp;the&nbsp;wikipedia&nbsp;article&nbsp;on&nbsp;Dijkstra's&nbsp;algorithm</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;#Note&nbsp;that&nbsp;the&nbsp;vertices&nbsp;are&nbsp;numbered&nbsp;modulo&nbsp;6,&nbsp;so&nbsp;6&nbsp;is&nbsp;called&nbsp;0&nbsp;here</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;V=range(6)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;E=[[1,2,7],[1,3,9],[1,0,14],[2,1,7],[2,3,10],[2,4,15],[3,1,9],[3,2,10],</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;[3,4,11],[3,0,2],[4,2,15],[4,3,11],[4,5,6],[5,4,6],[5,0,9],[0,1,14],</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;[0,3,2],[0,5,9]]</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;m=Graph(V,E)</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;&quot;size&nbsp;of&nbsp;graph&nbsp;is&quot;,&nbsp;m.size</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;&quot;distance&nbsp;and&nbsp;best&nbsp;route&nbsp;is&quot;,&nbsp;m.dijkstra(1,5)</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">&nbsp;</li>
<li class="codeLI">
if&nbsp;__name__==&quot;__main__&quot;:&nbsp;main()</li>
<li class="codeLI">&nbsp;</li>

	</ol>
</div>
</div>
<!-- /CODE -->


The main here is just an example, implementing the network shown in the wikipedia article.  To use it, you simply need to get your network arranged into a list of vertices (0,1,...,n-1), and your edges into a list of coordinates of the form [a,b,d], where the edge is from a to b with weight d.  If you want undirected, you simply need to add [b,a,d].  If you want unweighted you need to just set d=1.<br />
<br />
I've been planning the design of some mazes for the local science centre, which is why I've got this!  Any improvements/comments are welcome.</div>

]]></content:encoded>
			<category domain="http://bytes.com/topic/python/insights/">insights</category>
			<dc:creator>Glenton</dc:creator>
			<guid isPermaLink="true">http://bytes.com/topic/python/insights/877227-dijkstras-algorithm-finding-shortest-route</guid>
		</item>
	</channel>
</rss>
