时间:2021-05-02
N久都没做过关于C#的WinForm程序了,一直都是在研究asp.net的程序。
今天有个朋友问到深度遍历图这样的问题,开始都不知道如何下手,就问了问baidu 和 google,看到有人用C++写的这样的例子,顺便就学习了一下,发现自己都忘得差不多了(包括:数据结构),只能联想到刚开始学vs2003的时候,学习的第一个Hello Worl的例子,要创建一个控制台应用程序。
接着就打开VS2005,新建——>项目——>控制台应用程序
代码如下:
1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Text;4usingSystem.Collections;56namespaceConsoleApplication27{8classProgram9{10staticvoidMain(string[]args)11{12Graphgraph=newGraph();13graph.addVertex('A');14graph.addVertex('B');15graph.addVertex('C');16graph.addVertex('D');17graph.addVertex('E');18graph.addVertex('F');19graph.addVertex('G');20graph.addVertex('H');21graph.addEdge('A','B');22graph.addEdge('B','D');23graph.addEdge('B','E');24graph.addEdge('E','H');25graph.addEdge('D','H');26graph.addEdge('A','C');27graph.addEdge('C','F');28graph.addEdge('F','G');29graph.addEdge('C','G');30Console.Write("深度遍历结果:");31graph.dfs();32Console.WriteLine();33}34}3536classVertex37{38publicVertex(charlabel)39{40_label=label;41wasVisited=false;42}434445publicchar_label;46publicboolwasVisited;47}4849classGraph50{51privatestaticintflag=1;52privateintmax_vertexs=20;//最大顶点数53privateVertex[]vertexList;54privateint[,]adjMat;55privateintcountVertexs;56privateStackthestack;57publicGraph()58{59vertexList=newVertex[max_vertexs];60adjMat=newint[max_vertexs,max_vertexs];61countVertexs=0;62for(intj=0;j<max_vertexs;j++)63for(intk=0;k<max_vertexs;k++)64adjMat[j,k]=0;65thestack=newStack(max_vertexs);66}67//初始添加点数68publicvoidaddVertex(charlabel)69{70vertexList[countVertexs++]=newVertex(label);71}7273publicvoidaddEdge(intstart,intend)74{75adjMat[start,end]=1;76adjMat[end,start]=1;77}7879publicvoidaddEdge(charstartV,charendV)80{81intstart=-1,end=-1;82for(inti=0;i<countVertexs;i++)83{84if(startV==vertexList[i]._label)start=i;85if(endV==vertexList[i]._label)end=i;86}87if(start==-1)Console.WriteLine("顶点{0}不存在",startV);88if(end==-1)Console.WriteLine("顶点{0}不存在",endV);89//权值默认为190adjMat[start,end]=1;91adjMat[end,start]=1;92}9394//显示字符95publicvoiddisplayVertex(intv)96{97if(flag==1)98{99Console.Write(vertexList[v]._label);100}101else102{103Console.Write(","+vertexList[v]._label);104}105flag++;106}107//深度优先遍历108publicvoiddfs()109{110vertexList[0].wasVisited=true;111displayVertex(0);112thestack.Push(0);113//遍历结点114while(thestack.Count!=0)115{116//从第v个顶点出发递归地深度优先遍历图(读取栈里的第一个元素,但是不出栈)117intv=getAdjUnvisitedVertex(Int32.Parse((thestack.Peek().ToString())));118if(v==-1)119//元素出栈120thestack.Pop();121else122{123vertexList[v].wasVisited=true;124displayVertex(v);125//元素进栈126thestack.Push(v);127}128}129//初始化所有的顶点状态为未被访问130for(intj=0;j<countVertexs;j++)131vertexList[j].wasVisited=false;132}133134publicintgetAdjUnvisitedVertex(intv)135{136for(intj=0;j<countVertexs;j++)137if(adjMat[v,j]==1&&vertexList[j].wasVisited==false)138returnj;139return-1;140}141}142}143结果如图:
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JavaScript树的深度优先遍历和广度优先遍历算法。分享给大家供大家参考,具体如下:1、深度优先遍历的递归写法functiondeepTrav
本文实例讲述了java实现二叉树的深度优先遍历和广度优先遍历算法。分享给大家供大家参考,具体如下:1.分析二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优
1.简介无向图是图结构的一种。本次程序利用邻接表实现无向图,并且通过广度优先遍历找到两点之间的最短路径。2.广度优先遍历广度优先遍历(BFS)和深度优先遍历(D
本文实例为大家分享了C#深度优先搜索算法的具体代码,供大家参考,具体内容如下//论文要用到其改进算法,在此先demo测试一下usingSystem;usingS
本文实例讲述了php遍历树的常用方法。分享给大家供大家参考。具体如下:一、递归的深度优先的算法: