void graph::showVertex()//显示图的结点 { for(i=0;i<Vertices.ListSize();i++)//显示坐标 cout<<setw(5)<<i; cout<<endl; for(i=0;i<Vertices.ListSize();i++)//显示数据 cout<<setw(5)<<Vertices.Getdata(i); cout<<endl; }
int graph::getweight(const int nodestart,const int nodeend)//求两个结点之间的边的权值 { if(nodestart<0||nodestart>Vertices.ListSize()||nodeend<0||nodeend>Vertices.ListSize()) { cout<<"对不起参数越界出错!"<<endl; return false; } else return Edge[nodestart][nodeend]; }
int graph::deleteEdge(const int nodestart,const int nodeend)//删除一条边 { if(nodestart<0||nodestart>Vertices.ListSize()||nodeend<0||nodeend>Vertices.ListSize()) { cout<<"对不起参数越界出错!"<<endl; return 0; } else { Edge[nodestart][nodeend]=maxweight; numofedges--; return 1; } }
int graph::insertEdge(const int nodestart,const int nodeend,int weight)//添加一条边 { if(nodestart<0||nodestart>Vertices.ListSize()||nodeend<0||nodeend>Vertices.ListSize()) { cout<<"对不起参数越界出错!"<<endl; return 0; } else { Edge[nodestart][nodeend]=weight; numofedges++; return 1; } }
void graph::showgraph()//图的显示函数 { for(i=0;i<Vertices.ListSize();i++)//用邻接矩阵来模拟图的边的相关信息 { for(j=0;j<Vertices.ListSize();j++) { if(getweight(i,j)==maxweight) cout<<setw(5)<<"∞";//表示两个结点之间没有边 else cout<<setw(5)<<getweight(i,j); } cout<<endl; } }
int graph::getnextneighbor(const int nodestart,const int nodeend)//求取其下一条邻接边 {//找结点nodestart的<nodestart,nodeend>邻接边的下一条邻接边 if(nodestart<0||nodestart>Vertices.ListSize()||nodeend<0||nodeend>Vertices.ListSize()) { cout<<"对不起参数越界出错!"<<endl; return false; } else {//使col为nodeend+1因此寻找的边是nodestart的<nodestart,nodeend>邻接边的下一条邻接边 for(int col=nodeend+1;col<=Vertices.ListSize();col++) { if(Edge[nodestart][col]>0&&Edge[nodestart][col]<maxsize) return col; } return -1; } }
int graph::getfirstneighbor(const int v)//求取其第一个相邻结边 { if(v<0||v>Vertices.ListSize()) { cout<<"对不起参数越界出错!"<<endl; return false; } else { for(int col=0;col<=Vertices.ListSize();col++) { if(Edge[v][col]>0 && Edge[v][col]<maxsize) return col;//若存在相邻的结点返回其下标 } return -1;//否则返回-1 } }
int graph::deleteVertex(const int v)//删除一个结点 { for(int i=0;i<Vertices.ListSize();i++)//删除结点必须把与这个结点相关联的全部的边首先删除 for(int j=0;j<Vertices.ListSize();j++) { if(i==v||j==v && Edge[i][j]>0 && Edge[i][j]<maxweight) { Edge[i][j]=maxweight; numofedges--; } } int flag=Vertices.Delete(v); if(flag==1)//提供一个标志位为后面的调用方便 return 1; else return 0; }
char graph::getvalue(const int i)//求取图的某个结点的值 { if(i<0||i>Vertices.ListSize()) { cout<<"对不起参数越界出错!"<<endl; return false; } else return Vertices.Getdata(i);//采用顺序表的操作达成目标 }
void graph::insertVertices(const char& vertices)//添加一个结点 { Vertices.Insert(vertices,Vertices.ListSize());//为了简单把添加结点放在顺序表的最后位置 }
int numofVertices(){return Vertices.ListSize();} //求图的结点个数