数据结构作业--图遍历

数据结构老师布置一道题目,憋了一天才搞出来,还是练习地不够啊!不过班里面其他人搞出来的也不多啊!

题目

PS:头文件是老师给的。

一、请建立一个空项目,添加GraphTraverseTest.cpp源文件和AdjMWGraph.h、AdjLWGraph.h、CreatAdjWGraph.h、AdjWGraphApp.h、SeqList.h、SeqQueue.h等六个头文件。其中:

AdjMWGraph.h头文件采用邻接矩阵实现带权有向图数据结构;
    AdjLWGraph.h头文件采用邻接表实现带权有向图数据结构;
    CreatAdjWGraph.h头文件实现邻接矩阵图的构造和邻接表图的构造;
    AdjWGraphApp.h头文件实现图的应用(包括最小生成树Prim算法和最短路径Dijkstra算法)
    SeqList.h头文件实现顺序表数据结构;
    SeqQueue.h头文件实现顺序循环队列数据结构。

二、你的任务:

在图的应用头文件AdjWGraphApp.h中,完成Path(v0)函数,实现输出图中第v0顶点到其余各顶点的路径。
    提示:(1)采用遍历实现;(2)要考虑路径的表现形式和存储结构。

我是这样实现的:

vector<int>vec_path;

bool Is_In_Vector(vector<int> &vec,int m)
{
    int judge(0);

for(size_t i(0);i<vec.size();i++)
    {
        if(m==vec[i]) judge=1;
    }

if(judge==1) return 1;
    else return 0;
}

//Path函数适用于邻接矩阵带权有向图和邻接表带权有向图数据结构;

template <class GraphType>

int * Path(GraphType &G0,int v0,int vx)
{

//GrapType类,图类;
    vec_path.push_back(v0);

//for循环,遍历v0指向的结点;
    for(int j=0;j<G0.NumOfVertices();j++)

{

//NumberOfVertices(),结点数目;
        if(j==vx) continue;
        if(G0.IsEdge(v0,j)==1 && Is_In_Vector(vec_path,j)==0)
            Path(G0,j,vx);    //递归
    }

if(G0.IsEdge(v0,vx)==1)    //判断v0和vx之间是否存在边,若存在边IsEdge返回1;
    {
        for(size_t i=0;i<vec_path.size();i++)
        {
            cout<<vec_path[i];
        }
        cout<<vx<<"  end"<<endl;  //输出路径
        vec_path.pop_back();
        return 0;
    }

else vec_path.pop_back();
}

这是一个递归算法,做得时候很别扭,要逆着想。不过做出来之后还是很有成就感滴,嘿嘿嘿嘿嘿~

时间: 2024-10-06 08:42:37

数据结构作业--图遍历的相关文章

数据结构之图(术语、存储结构、遍历)

1.相关术语 顶点(Vertex).弧(Arc).弧头(初始点).弧尾(终结点).边(Edge).有向图(Directed graph).无向图(Undigraph).完全图(Completed grapg).有向完全图.稀疏图(Sparse graph).稠密图(Dense graph).权(weigh).网(network).无向网.有向网.子图(Subgraph).邻接点(Adjacent).度(Degree).入度(Indegree).出度(Outdegree).路径(path).简单路

数据结构之图 Part3 – 2 遍历

BFS using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LH.GraphConsole { class Program { private static bool[] visited; private static Queue<int> rootVertexQueue = new Queue<int>(); static void Main

数据结构之图 Part3 – 1 遍历

DFS using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace LH.GraphConsole { class Program { private static bool[] visited; static void Main(string[] args) { DFSTranverse(); } private static void DFSTranverse(

数据结构:图的遍历--深度优先、广度优先

图的遍历:深度优先.广度优先 遍历 图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点.当然,每个顶点有且只能被访问一次. 在图的遍历中,深度优先和广度优先是最常使用的两种遍历方式.这两种遍历方式对无向图和有向图都是适用的,并且都是从指定的顶点开始遍历的.先看下两种遍历方式的遍历规则: 深度优先 深度优先遍历也叫深度优先搜索(Depth First Search).它的遍历规则:不断地沿着顶点的深度方向遍历.顶点的深度方向是指它的邻接点方向. 具体点,给定一图G=<V,E>,

rwkj 1501 数据结构:图的DFS遍历

数据结构:图的DFS遍历 时间限制(普通/Java):1000MS/3000MS            运行内存限制:65536KByte 总提交:259            测试通过:183 描述 从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历.图的遍历的遍历有DFS和BFS两种. 上面的图,从顶点0出发,按照顶点序号从小到大的顺序DFS,得到遍历顺序为0 1 2 3  4 5 6 7 8. 输入 输入图的顶点个数(<20)与边数,以及每

JAVA 图作业算法实现、代写Graphs 数据结构作业

JAVA 图作业算法实现.代写Graphs 数据结构作业Lab Case – Algorithms and Data Structure, 2017-2018Phase 3. GraphsCurrently, SharingCar only provides service in ten cities (Madrid, Barcelona, Valencia, Sevilla, Bilbao, Granada, Toledo, Salamanca, Alicante, Cáceres). Not

图遍历的演示

[问题描述] 很多涉及图上操作的算法都是以图的遍历操作为基础的.试写一个程序,演示无向图的遍历操作. 以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历.以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集. 借助于栈类型(自己定义和实现)将深度优先遍历用非递归算法实现.(非递归算法的实现为选做内容,如能实现,适当加分) [测试数据] 在<数据结构>教材中任意找两个无向图作为测试数据. [实现提示] 设图的结点不超过30个,每个结点用一个编号表示(如果一个图有n个

【算法与数据结构】图 -- 邻接表

/************************************************************************ 边(弧)结点 -------------------------- |adjvex | info | nextarc | -------------------------- adjvex:邻接点域,该点在图中的位置 info :相关信息,比如可以保存从某顶点到该点的权值 nextac:指向下一个与该点有相同邻接点的顶点 顶点结点 ---------

【算法与数据结构】图 -- 十字链表

图的[十字链表]表示法是一种链式存储结构,可以看成是[邻接表]和[逆邻接表]的组合 本文中用到的有向图 /************************************************************************ 有向图的存储:十字链表 有向图的十字链表存储结构,是有一种链式存储结构,可以看成是[邻接表]和[逆邻接表] 的结合. 图中每条弧对应一个[弧结点],每个顶点对应一个[顶点结点] 弧结点 -------------------------------