#include #include using namespace std; const int Infinity=-1; typedef char VexType; struct VexCell//顶点的信息 { VexType data;//顶点数据 bool visited;//是否被访问过 }; struct ArcCell//弧的信息(结构体) { int adj; }; const MVN=21; struct MGraph { VexCell vexs[MVN];//顶点数组 ArcCell arcs[MVN][MVN];//邻接矩阵 int kind,vexnum,arcnum;//类型,顶点数,弧数 }; int LocateVex(MGraph &G,VexType v);//查找顶点 bool InsertVex(MGraph &G,VexType u);//插入顶点 bool InsertArc(MGraph &G,VexType u,VexType v,int w=1);//插入弧 bool DeleteArc(MGraph &G,VexType u,VexType v);//删除弧 bool DeleteVex(MGraph &G,VexType v);//删除顶点 void CreateGraph(MGraph&G,char fn[]);//建立图 void Show(MGraph &G); int main() { int count1=0; int count2=0; MGraph G; char fn[]="fn.txt"; CreateGraph(G,fn); Show(G); VexType x='s',y='a',z='b',f='a'; cout<<"插入顶点:"<MVN)return false; i=LocateVex(G,u); if(i>0)return false; G.vexnum++; G.vexs[G.vexnum].data=u; for(i=1;i<=G.vexnum;i++) G.arcs[i][G.vexnum].adj=G.arcs[G.vexnum][i].adj=Infinity; return true; } bool InsertArc(MGraph&G,VexType u,VexType v,int w) { int i,j; i=LocateVex(G,u);if(i==0)return false; j=LocateVex(G,v); if(j==0||j==i||G.arcs[i][j].adj!=Infinity)return false; G.arcs[i][j].adj=w; G.arcnum++; if(G.kind>=3) { G.arcs[j][i].adj=w; G.arcnum++; } return true; } int LocateVex(MGraph&G,VexType v) { int i; for(i=G.vexnum;i>0&&G.vexs[i].data!=v;i--); return i; } bool DeleteArc(MGraph& G,VexType u,VexType v) { int i,j; i=LocateVex(G,u);if(i==0)return false; j=LocateVex(G,v); if(j==0||G.arcs[i][j].adj==Infinity)return false; G.arcs[i][j].adj=Infinity; G.arcnum--; if(G.kind>=3) { G.arcs[j][i].adj=Infinity;G.arcnum--; } return true; } bool DeleteVex(MGraph &G,VexType v) { int i,j; j=LocateVex(G,v); G.vexs[j]=G.vexs[G.vexnum]; for(i=1;i<=G.vexnum;i++) { if(G.arcs[i][j].adj!=Infinity)G.arcnum--; if(G.arcs[j][i].adj!=Infinity)G.arcnum--; } if(j>G.kind;i=0; while(true) { f>>u;if(u=='#')break; i++;G.vexs[i].data=u; } G.vexnum=i; for(i=1;i<=G.vexnum;i++) for(j=1;j<=G.vexnum;j++) G.arcs[i][j].adj=Infinity; G.arcnum=0; while(true)//边 { f>>u>>v;if(u=='#'||v=='#')break; if(G.kind==1||G.kind==3) w=1; else f>>w; InsertArc(G,u,v,w); } f.close(); } void Show(MGraph &G) { int i=1,j=1; cout<<"所有顶点为:"; for(i;i<=G.vexnum;i++) cout< "; } else { for(i=1;i<=G.vexnum;i++) for(j=1;j