bellman-ford with python
bash-3.2$ cat drg.data | python bellman_ford.py 3 2 0 10000 1 0 2 2
import sys; lineNum=0; nodeNum=0; vetexList = []; dist = []; pre = []; sourceNode = -1; dataFile = open('drg.data', 'r'); [ nodeNum, sourceNode ] = dataFile.readline().split("\t"); dataFile.close(); print (nodeNum, sourceNode); nodeNum = int(nodeNum); sourceNode = int(sourceNode) - 1; dist = [10000 for i in range(nodeNum)]; pre = [-1 for i in range(nodeNum)]; dist[sourceNode] = 0; for i in range(1, nodeNum): dataFile = open('drg.data', 'r'); lineNum==0; for line in sys.stdin: line = line.strip("\n"); if lineNum == 0 : lineNum = 1; continue; else : #process edges [frm, to, wei] = line.split("\t"); frm = int(frm)-1; to = int(to)-1; wei = int(wei); if (dist[frm] + wei < dist[to]): dist[to] = dist[frm] + wei; pre[to] = frm; dataFile.close(); for i in range(len(dist)): print (i, dist[i]); dataFile = open('drg.data', 'r'); lineNum==0; for line in sys.stdin: line = line.strip("\n"); if lineNum == 0 : lineNum = 1; continue; else : #process edges [frm, to, wei] = line.split("\t"); if (dist[frm] + wei < dist[to]): print ("Graph contains a neg-wei cycle"); dataFile.close();
data :
3 2
1 3 1
2 3 2
3 2 3
1 import sys;
2
3
4 lineNum=0;
5 nodeNum=0;
6
7 vetexList = [];
8 dist = [];
9 pre = [];
10 sourceNode = -1;
11
12 dataFile = open('drg.data', 'r');
13 [ nodeNum, sourceNode ] = dataFile.readline().split("\t");
14 dataFile.close();
15 print (nodeNum, sourceNode);
16
17 nodeNum = int(nodeNum);
18 sourceNode = int(sourceNode) - 1;
19 dist = [10000 for i in range(nodeNum)];
20 pre = [-1 for i in range(nodeNum)];
21 dist[sourceNode] = 0;
22
23 for i in range(1, nodeNum):
24 dataFile = open('drg.data', 'r');
25 lineNum==0;
26 for line in sys.stdin:
27 line = line.strip("\n");
28 if lineNum == 0 :
29 lineNum = 1;
30 continue;
31 else : #process edges
32 [frm, to, wei] = line.split("\t");
33 frm = int(frm)-1;
34 to = int(to)-1;
35 wei = int(wei);
36 if (dist[frm] + wei < dist[to]):
37 dist[to] = dist[frm] + wei;
38 pre[to] = frm;
39 dataFile.close();