void graph::initopological()//拓扑排序环境初始化 { Vertices.ClearList(); //结点数组清空 initializationofEdge(maxvertices); for(j=0;j<maxvertices;j++) //初始化结果数组、入度数组、删除标志数组 { topologicalSort[j]=0; Indegree[j]=0; //用列下标统计入度,便于理解 deleflag[j]=0; } }
void graph::inputdata(void) { int nodestart,nodeend,weight;//起始点、终止点、权值 Vertices.ClearList();//结点数组清空 initializationofEdge(maxvertices); cout<<"下面添加结点信息!"<<endl; cout<<"----------------"<<endl; cout<<"请输入结点个数(小于 "<<maxvertices<<"):"; cin>>inputnodenum; nodearray=new char[inputnodenum];//建立字符数组 cout<<"请输入"<<inputnodenum<<"个结点(单个Ascii码字符),空格隔开,输入完毕后回车:"<<endl; for(i=0;i<inputnodenum;i++) { cin>>nodearray[i]; insertVertices(nodearray[i]); } cout<<inputnodenum<<"个结点已经添加成功了!字符的的默认编号是:"<<endl; for(i=0;i<inputnodenum;i++)//显示对应坐标 cout<<setw(5)<<i; cout<<endl; for(i=0;i<inputnodenum;i++)//显示数组中字符 cout<<setw(5)<<nodearray[i]; cout<<endl<<endl; cout<<"下面添加边信息!"<<endl; cout<<"---------------"<<endl; cout<<"请输入边数: "; cin>>inputedgenum; cout<<"例如:1 2 10 表示添加了一条边(从1号结点到2号结点,权值为10)!:"<<endl; for(i=0;i<inputedgenum;i++) { cout<<"下面添加第"<<i+1<<"条边的信息: "<<endl; cin>>nodestart>>nodeend>>weight; flag=insertEdge(nodestart,nodeend,weight); if(flag==1) cout<<"从"<<nodestart<<"号结点"<<"到"<<nodeend<<"号结点之间已经添加了权值为" <<weight<<"的一条边!"<<endl<<endl; } cout<<"图已经建立!"<<endl; delete[] nodearray; build=1; }
void graph::datafordijkstra()//为求最短路径问题准备数据 { Vertices.ClearList(); //结点数组清空 initializationofEdge(maxvertices); //边数组初始化 inputnodenum=6; //结点数 inputedgenum=8; //边数 // 0 1 2 3 4 5 char defaultnodes[6]={'a','b','c','d','e','f'};//结点名称 for(i=0;i<inputnodenum;i++) { insertVertices(defaultnodes[i]);//把结点存入存储结构 } insertEdge(0,2,10); //把边的信息存入存储结构 insertEdge(0,4,30); insertEdge(0,5,100); insertEdge(1,2,5); insertEdge(2,3,50); insertEdge(3,5,10); insertEdge(4,3,20); insertEdge(4,5,60); build=1; }