带权值的无向图的深度和广度优先搜索方法
有一道题目,要写出这个图的深度和广度优先搜索的遍历序列,深度的不知道如何求解啊,请高手指点啊!!!!...
有一道题目,要写出这个图的深度和广度优先搜索的遍历序列,深度的不知道如何求解啊,请高手指点啊!!!!
展开
展开全部
方法如下:
c#)图的深度优先搜索
publicvoidDFSTraverse()//深度优先遍历
{
InitVisited();//将visited标志全部置为false
DFS(items[0]);//从第一个顶点开始遍历
}
privatevoidDFS(Vertex<T>v)//使用递归进行深度优先遍历
{
v.visited=true;//将访问标志设为true
Console.Write(v.data+"");//访问
Nodenode=v.firstEdge;
while(node!=null)//访问此顶点的所有邻接点
{ //如果邻接点未被访问,则递归访问它的边
if(!node.adjvex.visited)
{
DFS(node.adjvex);//递归
}
node=node.next;//访问下一个邻接点
}
}
privatevoidInitVisited()//初始化visited标志
{
foreach(Vertex<T>vinitems)
{
v.visited=false;//全部置为false
}
}
c#)图的广度优先搜索
publicvoidBFSTraverse()//广度优先遍历
{
InitVisited();//将visited标志全部置为false
BFS(items[0]);//从第一个顶点开始遍历
}
privatevoidBFS(Vertex<T>v)//使用队列进行广度优先遍历
{ //创建一个队列
Queue<Vertex<T>>queue=newQueue<Vertex<T>>();
Console.Write(v.data+"");//访问
v.visited=true;//设置访问标志
queue.Enqueue(v);//进队
while(queue.Count>0)//只要队不为空就循环
{
Vertex<T>w=queue.Dequeue();
Nodenode=w.firstEdge;
while(node!=null)//访问此顶点的所有邻接点
{ //如果邻接点未被访问,则递归访问它的边
if(!node.adjvex.visited)
{
Console.Write(node.adjvex.data+"");//访问
node.adjvex.visited=true;//设置访问标志
queue.Enqueue(node.adjvex);//进队
}
node=node.next;//访问下一个邻接点
}
}
}
c#)图的深度优先搜索
publicvoidDFSTraverse()//深度优先遍历
{
InitVisited();//将visited标志全部置为false
DFS(items[0]);//从第一个顶点开始遍历
}
privatevoidDFS(Vertex<T>v)//使用递归进行深度优先遍历
{
v.visited=true;//将访问标志设为true
Console.Write(v.data+"");//访问
Nodenode=v.firstEdge;
while(node!=null)//访问此顶点的所有邻接点
{ //如果邻接点未被访问,则递归访问它的边
if(!node.adjvex.visited)
{
DFS(node.adjvex);//递归
}
node=node.next;//访问下一个邻接点
}
}
privatevoidInitVisited()//初始化visited标志
{
foreach(Vertex<T>vinitems)
{
v.visited=false;//全部置为false
}
}
c#)图的广度优先搜索
publicvoidBFSTraverse()//广度优先遍历
{
InitVisited();//将visited标志全部置为false
BFS(items[0]);//从第一个顶点开始遍历
}
privatevoidBFS(Vertex<T>v)//使用队列进行广度优先遍历
{ //创建一个队列
Queue<Vertex<T>>queue=newQueue<Vertex<T>>();
Console.Write(v.data+"");//访问
v.visited=true;//设置访问标志
queue.Enqueue(v);//进队
while(queue.Count>0)//只要队不为空就循环
{
Vertex<T>w=queue.Dequeue();
Nodenode=w.firstEdge;
while(node!=null)//访问此顶点的所有邻接点
{ //如果邻接点未被访问,则递归访问它的边
if(!node.adjvex.visited)
{
Console.Write(node.adjvex.data+"");//访问
node.adjvex.visited=true;//设置访问标志
queue.Enqueue(node.adjvex);//进队
}
node=node.next;//访问下一个邻接点
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询