最基本的vertex類:
#ifndef vertex_h
#define vertex_h
#include #include #define inf int_max
class vertex
};#endif
接下來是edge類:
#ifndef edge_h
#define edge_h
#include "vertex.h"
class edge
/********** the id **********/
void setid(int id)
int getid()
/********* the vertex ********/
void settail(vertex& v)
void sethead(vertex& v)
/******** other method *******/
void setweight(const float w)
float getweight()
float getcapacity()
float getpassrate() };
#endif
當然還有路問題需要的path類:
#ifndef path_h
#define path_h
#include #include "vertex.h"
class path : std::list;
#endif
這是path類的實現:
#include "path.h"
#include #include "vertex.h"
#include using namespace std;
path::path(vertex& tail)
push_back(temp);
}void path::print()
下來就是最重要也是最複雜的graph類了!
#ifndef graph_h
#define graph_h
#include #include "edge.h"
#include "vertex.h"
#include "path.h"
#include #include class graph
graph(const char* inputfilename);
graph(std::list& edge);
~graph();
/*********** size info **********/
int getnumvertex()
int getnumedge()
void print();
void addedge(edge& edge);
void dijkstra(int s, int d);
void dijkstra(vertex& s, vertex& d);
};#endif
下來是實現:
#include "graph.h"
#include #include #include #include #include #include #include using namespace std;
graph::graph(const char* inputfilename)
}graph::graph(list& edge)
void graph::addedge(edge& edge)
else
incmap.find(edge.tail)->second.push_back(&edge);
}void graph::print()
}graph::~graph()
}bool comp(vertex* a, vertex* b)
void graph::update(vertex* v)
list::iterator it;
for (it = inc.begin(); it != inc.end(); it++) }
}void graph::dijkstra(int sid, int did)
while(!notmarkedvertex.empty());
path = new path(*vertexmap[did]);
path->print();
}void graph::dijkstra(vertex& s, vertex& d)
目前的工作就是這些了。
下面是乙個測試程式:
test.cpp:
#include #include "graph.h"
#include "path.h"
using namespace std;
int main()
還有inputfile.txt 的內容:
n 7
e 91 1 2 1 20 0.8
2 2 3 5 30 0.8
3 3 6 6 22 0.6
4 7 6 5 22 0.4
5 1 7 3 20 0.2
6 5 6 2 20 0.3
7 3 5 1 20 0.5
8 4 5 6 20 0.6
9 2 4 2 20 0.7
最後是執行結果了!
通訊網Project之 單源單宿最短路問題
最主要的vertex類 ifndef vertex h define vertex h include include define inf int max class vertex endif 接下來是edge類 ifndef edge h define edge h include vertex...
單源最短路徑之Bellman Ford
bellman ford的使用範圍 1 單源 2 有負權重 3 有向 bellman ford演算法的描述 最短路徑估計值g v 當前求得的源節點s到節點v最短距離 最短路徑d v 源節點s帶節點v的最短路徑距離 bellman ford演算法通過對所有的邊進行鬆弛操作來漸漸地降低從源節點s到每個節...
演算法學習之Bellman Ford單源最短路問題
一.演算法分析 這個演算法的思路還是很清晰的,該演算法以邊作為主要研究物件。首先我們考慮使用乙個邊,這邊用鄰接表類似的形式由u i 儲存起始點 v i 儲存終點 w i 儲存邊長權值 來儲存,那麼是否可以通過這條邊來使的我們的起點到這條邊的終點的距離縮短呢?如果可以的話就縮短這個距離,如果不行的話就...