主要解决三个问题:
前提:有向图+邻接矩阵存储
问题1、判断有向图中是否存在顶点u到v的路径
问题2、求u到v的所有简单路径
问题3、求u到v长度为k的简单路径
具体如下:
问题1:判断有向图中是否存在顶点u到v的路径
方法:可以使用深度遍历或广度遍历
源代码:
#include <iostream>
using namespace std;
const int MAX_Vertex_Num = 20;
template<class VexType,class ArcType>
class MGraph
{
public:
void CreateGraph();//创建图
int LocateVex(VexType v);//返回顶点v所在顶点向量中的位置(下标)
bool getPathiToj(VexType u1,VexType u2);
private:
VexType vexs[MAX_Vertex_Num];//顶点向量
ArcType arcs[MAX_Vertex_Num][MAX_Vertex_Num];
int vexnum;//顶点数
int arcnum;//边数
private:
void getPathiToj_DFS(int x,int y,int num,bool& isFind,bool visited[MAX_Vertex_Num],int path[MAX_Vertex_Num]);//借助DFS的思想实现
};
template<class VexType,class ArcType>
void MGraph<VexType,ArcType>::CreateGraph()
{
VexType first;
VexType Secend;
cout<<"请输入顶点数:";
cin>>vexnum;
cout<<"请输入边数:";
cin>>arcnum;
cout<<"请输入各个顶点值:";
for (int i=0;i<vexnum;i++)
{
cin>>vexs[i];
}
//初始化邻接矩阵
for (int i=0;i<arcnum;i++)
{
for (int j=0;j<arcnum;j++)
{
arcs[i][j]=0;
}
}
cout<<"请输入边的信息:"<<endl;
for (int i=0;i<arcnum;i++)
{
cin>>first>>Secend;
//如果边有权值的话,则还应该输入权值
int x = LocateVex(first);
int y = LocateVex(