Files

130 lines
2.9 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#include<string>
#include "LinkQueue.h"
#include "Mgraph.h"
#include <iostream>
using namespace std;
// 有向图
void DispMenu()
{
cout<<"\n 请选择你要的操作"<<endl;
cout<<" 1. 建立有向图"<<endl;
cout<<" 2. 返回顶点在图中的位序"<<endl;
cout<<" 3. 返回某位序的顶点"<<endl;
cout<<" 4. 修改顶点"<<endl;
cout<<" 5. 增加新顶点"<<endl;
cout<<" 6. 删除顶点弧"<<endl;
cout<<" 7. 增添弧"<<endl;
cout<<" 8. 删除弧"<<endl;
cout<<" 9. 从第一个顶点出发深度优先遍历图"<<endl;
cout<<"10. 从第一个顶点广度优先遍历图"<<endl;
cout<<"11. 显示图"<<endl;
cout<<" 0. 退出"<<endl;
}
bool visited[MAX_VEXNUM]={false};
void main()
{
char u,v;
int k;
MGraph<char> G;
int choice;
do
{
DispMenu();
cin>>choice;
switch(choice)
{
case 1: // 创建无向图
CreateDG(G);
cout<<endl;
cout<<"创建的图为:"<<endl;
DispG(G);
break;
case 2: // 查询顶点位序
cout<<"请输入您要的所要查询位序的顶点: ";
cin>>u;
k=LocateVex(G,u);
if(k!=-1)
cout<<"顶点"<<u<<"在图中的位序为: "<<k<<endl;
else
cout<<"顶点"<<u<<"不存在!"<<endl;
cout<<endl;
break;
case 3: // 按位序查找顶点值
int index;
cout<<"请输入您要的所要查询顶点的位序: ";
cin>>index;
if(GetVex(G,index,v))
cout<<"位置为"<<index<<"的顶点为: "<<v<<endl;
else
cout<<""<<index<<"顶点不存在!"<<endl;
cout<<endl;
break;
case 4: // 修改顶点
cout<<"请输入要更改的顶点: ";
cin>>u;
cout<<"请输入更改后顶点: ";
cin>>v;
PutVex(G,u,v);
cout<<"顶点值修后的图为:"<<endl;
DispG(G);
cout<<endl;
break;
case 5: // 增加顶点
cout<<"请输入要插入顶点: ";
cin>>v;
InsertVex(G,v);
cout<<"插入顶点和相应的弧后的图:"<<endl;
DispG(G);
cout<<endl;
break;
case 6: // 删除顶点
cout<<"请输入要删除的顶点:";
cin>>v;
DeleteVex(G,v);
cout<<"删除顶点后的图为“"<<endl;
DispG(G);
cout<<endl;
break;
case 7: // 增加弧
cout<<"请输入要插入的弧的弧尾和弧头顶点";
cin>>u>>v;
if(InsertArc(G,u,v))
cout<<"插入弧后的图:"<<endl;
DispG(G);
cout<<endl;
break;
case 8: // 删除弧
cout<<"请输入要删除的弧的弧尾和弧头: ";
cin>>u>>v;
DeleteArc(G,u,v);
cout<<"删除弧后的图:"<<endl;
DispG(G);
cout<<endl;
break;
case 9: // 深度优先遍历
cout<<"从第一个顶点出发深度优先遍历图的序列为: "<<endl;
DFSTraverse(G);
cout<<endl;
break;
case 10: // 广度优先遍历
cout<<"从第一个顶点出发广度优先遍历图的序列为: "<<endl;
BFSTraverse(G);
cout<<endl;
break;
case 11: // 显示图
DispG(G);
cout<<endl;
break;
case 0:
cout<<"结束运行Bye-Bye!"<<endl;
break;
default:
cout<<"无效选择,请重选!"<<endl;
}//case
}while(choice!=0);
}//main