目的:使用C++模板设计并逐步完善图的邻接矩阵抽象数据类型(ADT)。
内容:(1)请参照图的邻接矩阵模板类原型,设计并逐步完善图的邻接矩阵ADT。(由于该环境目前仅支持单文件的编译,故将所有内容都集中在一个源文件内。在实际的设计中,推荐将抽象类及对应的派生类分别放在单独的头文件中。)
(2)使用构造函数,构造一个具有结点和边的有权图。
输入说明:
第一行:图的类型
第二行:结点数
第三行:结点集
第四行:无边标记
第五行:边数
第六行:边集
第七行:权集
输出说明:
第一行:图的类型
第二行:顶点集
空行
第三行:邻接矩阵
输入范例:
DN
6
1 2 3 4 5 6
-1
6
0 1
0 2
1 3
2 3
3 4
3 5
20 30 40 50 70 80
输出范例:
DN
1 2 3 4 5 6-1 20 30 -1 -1 -1
-1 -1 -1 40 -1 -1
-1 -1 -1 50 -1 -1
-1 -1 -1 -1 70 80
-1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1
#include#include #include #include #include #include #include using namespace std; string b[10001];//放顶点集 //DG(有向图) DN(有向网) UDG(无向图) UDN(无向网) template //顶点类型与边的类型 class adjmatrix_graph{ //顶点用字符串,边用整型 private: int Vers; //顶点数 int Edges; //边数 TypeOfEdge **edge;//邻接矩阵 //(TypeOfEdge表示顶点关系类型。对于无权图,用1或0,表示相邻否;对于带权图,则为权值类型) TypeOfVer *ver; //存放结点值 TypeOfEdge noEdge; //邻接矩阵中的∞的表示值 string GraphKind; //图的种类标志 bool DFS(int u,int &num,int visited[]); //DFS遍历(递归部分) public: //构造函数构造一个只有结点没有边的图。4个参数的含义: //图的类型、结点数、结点值和邻接矩阵中表示结点间没有边的标记 //(无权图:0,有权图:输入参数定) adjmatrix_graph(string kd,int vSize,TypeOfVer d[],TypeOfEdge noEdgeFlag){ GraphKind=kd; Vers=vSize; ver=new TypeOfEdge[Vers]; ver=d;//这个要写,然后就不用写下面的赋值了 noEdge=noEdgeFlag;//这个赋值一开始没写 //for(int i=0;i =Vers) return -1; if(v<0||v>=Vers) return -1; for(int i=v+1;i void shuchu(adjmatrix_graph &tu,int n){ cout< >n;//顶点数 for(int i=0;i >b[i];//顶点集合 cin>>no;//无边标记 cin>>m;//边数 int **a; a=new int* [m]; for(int i=0;i >a[i][0]>>a[i][1];//输入边集 //cin>>ans;//待删除的顶点 int *c; c=new int [m]; for(int i=0;i >c[i];//输入权集 //int u,v; //cin>>u>>v;//输入要删除边的弧头和弧尾 adjmatrix_graph tu(str,n,b,m,a,no,c); //cout<
额,这个简单题我是后抽到的,其实按顺序它应该早就出现了,没事,做前面的题的时候其实就相当于把这个题做了。
这个题也很简单,就不细说啦。



