目录
一.题目描述
样例输入
样例输出
二.代码实现
一.题目描述
输入一个图,用邻接矩阵存储(实际上也可以选择邻接表),并实现DFSTraverse *** 作。
拷贝前面已经实现的代码,主函数必须如下,完成剩下的部分。
int main()
{
Graph g;
CreateUDG(g);
DFSTraverse(g);
class="superseo">cout << endl;
DestroyUDG(g);
return 0;
}//main
输入
输入的第一行是两个整数,分别是图的总顶点数n和总边数e
第二行是n个空格分开的字符串,是顶点的名字,依次对应编号0~n-1。
随后有e行,每行两个空格分开的顶点名字,表示一条边的两个顶点。
具体见样例。
输出
输出图的DFS序列,遍历次序按教材,每个顶点后面跟一个空格。
具体见样例。
样例输入8 9
v1 v2 v3 v4 v5 v6 v7 v8
v1 v2
v1 v3
v2 v4
v2 v5
v3 v6
v3 v7
v4 v8
v5 v8
v6 v7
样例输出
v1 v2 v4 v8 v5 v3 v6 v7
二.代码实现
#include
#include
#include
using namespace std;
#define MVNum 100 //最大顶点数
typedef string VerTexType; //假设顶点的数据类型为字符串
typedef int ArcType; //假设边的权值类型为整型
bool visited[MVNum];//访问标志数组
//Status (* VisitFunc)(int v);//函数变量
//------------图的邻接矩阵------------------
typedef struct {
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum, arcnum; //图的当前vexnum点数和arcnum边数
} Graph;
//得到顶点i的数据
VerTexType Vertexdata(const Graph &g, int i)
{
return g.vexs[i];
}
int LocateVex(const Graph &g, VerTexType v) //返回定点所示的下标
{
//确定点v在G中的位置
for(int i = 0; i < g.vexnum; ++i)
if(g.vexs[i] == v)
return i;
return -1;
}//LocateVex
int FirstAdjVex(const Graph &g, int v)
{
//返回v的第一个邻接点编号,没有返回-1
/****在此下面完成代码***************/
int i,j;
for(i=v;i> g.vexnum >>g.arcnum;//是图的总顶点数n和总边数e
//第二行是n个空格分开的字符串,是顶点的名字,依次对应编号0~n-1。
for(i=0;i> g.vexs[i];
}
//每行两个空格分开的顶点名字,表示一条边的两个顶点
//构造邻接矩阵
for(k=0;k> v1 >> v2 ;
if(LocateVex(g,v1)||LocateVex(g,v2))
{
i=LocateVex(g,v1);
j=LocateVex(g,v2);
g.arcs[i][j]=1;
g.arcs[j][i]=g.arcs[i][j];
}
else
{
g.arcs[i][j]=0; //二维数组其他元素置零 各点之间没有连接
g.arcs[j][i]=g.arcs[i][j];
}
}
/***********************************/
}//CreateUDN
void DFS(Graph g, int v) //从第v个顶点出发,深度优先遍历g
{
int w;
cout << g.vexs[v] << " ";
visited[v]=true; // 访问第v个顶点,并置访问标志数组相应分量值为true
//VisitFunc(v);
//依次检查v的所有邻接点w,FirstAdjVex(g,v)表示v的第一个邻接点
//NextAdjVex(g,v,w)表示v的下一个邻接点 w>=0;表示存在邻接点
for(w=FirstAdjVex(g,v); w>=0; w=NextAdjVex(g,v,w))
{
if(!visited[w]) DFS(g,w);
//对v尚未访问的邻接顶点w递归调用DFS
}
}
void DFSTraverse(Graph g)
{
int v;
//VisitFunc = Visit;
for ( v=0; v
此题与博主另一篇博客的题 图的遍历——深度优先搜索 类似
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)