/*--------------------------无向图网邻接矩阵表示-----------------------------*/ #define MAX_VEXNUM 20 // 最大顶点数 #define INF 1000 // 无穷大 template struct MGraph // 图的邻接矩阵表示存储定义 { DT vexs[MAX_VEXNUM]; // 顶点信息,设权值为整型 int arcs[MAX_VEXNUM][MAX_VEXNUM]; int vexnum,arcnum; // 顶点数和边数 }; template void DispG(MGraph
G) // 显示图信息 { int i,j; DT u,v; cout< int LocateVex(MGraph
G,DT v) { for(int i = 0;i void CreateUDN(MGraph
&G) { int i,j,k,weight; DT v1,v2; cout<<"请输入无向网的顶点数 "; // 1. 输入顶点数、边数 cin>>G.vexnum ; cout<<"请输入无向网的边数 "; cin>>G.arcnum ; cout<<"请输入"<>G.vexs[i]; for(i=0;i>v1>>v2; // 4.1 输入边的两个邻接点和边权值 cin>>weight; i = LocateVex(G,v1); // 4.2 定位两个邻接点 j = LocateVex(G,v2); if(i<0 || j<0 || i==j) { cout<<"顶点信息错,重新输入!"< bool GetVex(MGraph
G, int k, DT &v) // 获取第 u 个顶点值v { if(k<0 || k>=G.vexnum) // u不存在,返回false return false; else { v=G.vexs[k]; return true; } } template bool PutVex(MGraph
&G,DT &u,DT v) // 为第u个顶点赋值 { int k; k=LocateVex(G,u); if(k<0 ) // u不存在,返回false return false; else // u存在,赋值 { G.vexs[k] = v; return true; } } //算法6.3 按值查找第一邻接点 template int FirstAdjvex(MGraph
G,int u) { if(u<0 || u>=G.vexnum) // 顶点不存在 return -1; // 无邻接点,返回-1 for(int j=0;j int NextAdjvex(MGraph
G,int u,int w) // 查找第u个顶点邻接点W的下一个邻接点 { if(u<0 || u>=G.vexnum || w<0 || w>=G.vexnum || G.arcs[u][w]==INF ) // 参数不合理 return -1; // 无邻接点 for(int j=w+1;j bool InsertVex(MGraph
&G,DT v) // 插入值为v的顶点 { DT w; int j,weight; char ans; if(G.vexnum>=MAX_VEXNUM) // 无存储空间,不能插入 { cout<<"无存储空间,不能插入!"<>ans; while(ans=='Y'|| ans=='y') { cout<<"输入另一个顶点值和边的权值"<>w>>weight; j=LocateVex(G,w); if(j>=0) // 顶点存在 InsertArc(G,v,w,weight); else cout<>ans; }; return true; } template bool InsertArc(MGraph
&G,DT v,DT w,int weight) // 在值为v、w顶点间加边 { int i = LocateVex(G,v); int j = LocateVex(G,w); if(i<0 || j<0 || i==j) // 顶点不存在或两端点相同 { cout<<"\n顶点不存在,或两顶点相同,不能插入!"< bool DeleteArc(MGraph
&G,DT v,DT w) // 按顶点值删除边 { int i = LocateVex(G,v); int j = LocateVex(G,w); if(i<0||j<0||i == j) // 边不存在,返回false { cout<<"边不存在!"< bool DeleteVex(MGraph
&G,DT v) // 按值删除顶点 { int i,j; DT w; i = LocateVex(G,v); // 顶点定位 if(i<0) { cout<<"顶点不存在!"< void DFS2(MGraph
G,int v) // 连通图深度优先遍历 { int w; visited[v] = true; // 访问v cout< void DFSTraverse(MGraph
G) // 非连通图深度优先遍历 { int i; for(i=0;i void BFS(MGraph
G,int v) { int w; LinkQueue Q; // 创建一个队列 InitQueue(Q); cout<=0;w=NextAdjvex(G,v,w)) // 遍历v的邻接点 if(!visited[w]) // 未被访问 { cout< void BFSTraverse(MGraph
G) // 广度优先遍历 { int i; for(i=0;i