找工作时当练习写的,仅供参考。
头文件:
#ifndef GRAPH_H_INCLUDED
#define GRAPH_H_INCLUDED
#define Max 10000
//adjacent matrix
class MGraph{
private:
int TotVer;
vector<int> Vertics;
vector<vector<int> > Edge;
public:
MGraph(){ }
MGraph(int t):TotVer(t){
//read vertics
cout<<"read vertics"<<endl;
int v;
for(int i=0;i<t;++i){
cin>>v;
Vertics.push_back(v);
}
//read edges
cout<<"read edges"<<endl;
Edge.resize(t);
for(int i=0;i<t;++i)
Edge[i].resize(t,0);
for(int i=0;i<t;++i)
for(int j=0;j<t;++j)
if(i!=j) Edge[i][j]=Max;
int i,j,cur;
while(cin>>i>>j>>cur){
if(i==-1&&j==-1&&cur==-1) break;
if(i!=j) Edge[i][j]=Edge[j][i]=cur;
}
}
int GetTotVec(){
return TotVer;
}
vector<int>& GetVertics(){
return Vertics;
}
vector<vector<int> >& GetEdge(){
return Edge;
}
void Dijkstra(int);
void Floyd();
};
//adjacent table
struct Edge{
int dest;
int cost;
Edge* next;
Edge(int d,int c):dest(d),cost(c),next(NULL){ }
};
struct Vertex{
int data;
Edge* adj;
Vertex():data(0),adj(NULL){ }
};
struct MSTNode{
int tail,head;
int cost;
};
class AGraph{
private:
int TotVer;
int TotEdge;
vector<Vertex> NodeTable;
public:
AGraph(){ }
AGraph(int t,int e):TotVer(t),TotEdge(e){
int d;
int tail,head,cost;
Edge* cure;
//read vertics
cout<<"read vertics"<<endl;
NodeTable.resize(t);
for(int i=0;i<t;++i){
cin>>d;
NodeTable[i].data=d;
}
//read edges
cout<<"read edges"<<endl;
for(int i=0;i<e;++i){
cin>>tail>>head>>cost;
int k=0;
while(k!=tail) ++k;
cure=NodeTable[k].adj;
if(cure==NULL) NodeTable[k].adj=new Edge(head,cost);
else{
while(cure->next!=NULL) cure=cure->next;
cure->next=new Edge(head,cost);
}
/*k=0;
while(k!=head) ++k;
cure=NodeTable[k].adj;
if(cure==NULL) NodeTable[k].adj=new Edge(tail,cost);
else{