数据结构实验七

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告(2014/2015学年第一学期)课程名称数据结构——使用C++语言描述实验名称图的基本运算及飞机换乘次数最少问题实验时间2014年12月3日指导单位计算机科学与技术系指导教师学生姓名班级学号学院(系)专业实验报告2实验名称图的基本运算及飞机换乘次数最少问题指导教师实验类型上机实验学时4实验时间2014年12月3日一、实验目的和要求1.验证在邻接矩阵和邻接表实现图的基本运算的算法;在邻接矩阵存储结构上实现图的深度和宽度优先遍历算法。2.设有n个城市,编号为0~n−1,m条航线的起点和终点由用户输入提供。寻找一条换乘次数最少的线路方案。提示:可以使用有向图表示城市间的航线。只要两城市间有航班,则图中这两点间存在一条权为1的边。可以使用Dijkstra算法实现。思考:如果是城市公交车的最少换乘问题,将如何解决?假如希望使用类似的算法,则图中的边如何设置?二、实验环境(实验设备)Vs2013win8.1实验原理及内容:实验一:1)掌握在图的邻接矩阵和邻接表存储结构实现图的基本运算的算法2)学习使用图算法解决应用问题的方法邻接矩阵的遍历与邻接表的遍历类似,都是通过递归来实现。以下是代码:voidExtMGraphT::DFS(){bool*visited=newbool[n];for(inti=0;in;i++)visited[i]=false;for(i=0;in;i++){if(!visited[i]){DFS(i,visited);coutendl;}}3delete[]visited;}templateclassTvoidExtMGraphT::DFS(intv,bool*visited){visited[v]=true;coutv;for(intu=0;un;u++)if(a[v][u]!=noEdge&&!visited[u])DFS(u,visited);}templateclassTvoidExtMGraphT::BFS(){bool*visited=newbool[n];for(inti=0;in;i++)visited[i]=false;for(inti=0;in;i++){if(!visited[i]){BFS(i,visited);}}delete[]visited;}templateclassTvoidExtMGraphT::BFS(intv,bool*visited){SeqQueueintq(Vertices());visited[v]=true;coutv;q.EnQueue(v);while(!q.IsEmpty()){q.Front(v);q.DeQueue();for(inti=0;in;i++)if(!visited[i]&&a[v][i]!=noEdge)4{visited[i]=true;couti;q.EnQueue(i);}}}在主函数中只要添加该代码:#include”extMGraph.h”voidmain(){intweight=3;intnoEdge=1000;intk=1;intl=2;ExtMGraphintextMGraph2(8,noEdge);extMGraph2.Insert(1,2,k);extMGraph2.Insert(1,4,k);extMGraph2.Insert(2,3,k);extMGraph2.Insert(4,3,k);extMGraph2.Insert(4,5,k);extMGraph2.Insert(3,6,k);extMGraph2.Insert(5,7,k);extMGraph2.Insert(6,7,k);extMGraph2.DFS();extMGraph2.BFS();}实验二:飞机的换乘问题。具体实现代码:Graph.h:#includeiostreamusingnamespacestd;enumResultCode{Underflow,Overflow,Success,Duplicate,NotPresent};voidshowResultCode(ResultCoderesult){intr=(int)result;switch(result){case0:coutResultCode:Underflowendl;break;case1:coutResultCode:Overflowendl;break;case2:coutResultCode:Successendl;break;case3:coutResultCode:Duplicateendl;break;case4:coutResultCode:NotPresentendl;break;default:coutExceptionoccured:unknownresultcodeendl;5}}templateclassTclassGraph{public:virtualResultCodeInsert(intu,intv,T&w)=0;virtualResultCodeRemove(intu,intv)=0;virtualboolExist(intu,intv)const=0;virtualintVerticles()const{returnn;}protected:intn,e;//e为边数};MGraph.h:#includeGraph.htemplateclassTclassMGraph:publicGraphT{public:MGraph(intmSize,constT&noedg);~MGraph();ResultCodeInsert(intu,intv,T&w);ResultCodeRemove(intu,intv);boolExist(intu,intv)const;protected:T**a;TnoEdge;};templateclassTMGraphT::MGraph(intmSize,constT&noedg){n=mSize;e=0;noEdge=noedg;a=newT*[n];for(inti=0;in;i++){a[i]=newT[n];for(intj=0;jn;j++){a[i][j]=noEdge;}a[i][i]=0;}}templateclassTMGraphT::~MGraph(){for(inti=0;in;i++)delete[]a[i];6delete[]a;}templateclassTboolMGraphT::Exist(intu,intv)const{if(u0||v0||un-1||vn-1||u==v||a[u][v]==noEdge)returnfalse;returntrue;}templateclassTResultCodeMGraphT::Insert(intu,intv,T&w){if(u0||v0||un-1||u==v)returnOverflow;if(a[u][v]!=noEdge)returnDuplicate;a[u][v]=w;e++;returnSuccess;}templateclassTResultCodeMGraphT::Remove(intu,intv){if(u0||v0||un-1||u==v)returnOverflow;if(a[u][v]==noEdge)returnNotPresent;a[u][v]=noEdge;e--;returnSuccess;}extMGraph.h:#includeMGraph.h#includeSeqQueue.h#defineINFTY10000templateclassTclassExtMGraph:publicMGraphT{public:ExtMGraph(intmSize,constT&noedg):MGraphT(mSize,noedg){}voidDFS();voidBFS();intChoose(int*d,bool*s);voidDijkstra(intv,T*d,int*path);voidShowDijkstra(intv,intflag);voidFloyd(T**d,int**path);intVertices(){returnn;}private:voidDFS(intv,bool*visited);voidBFS(intv,bool*visited);};7templateclassTvoidExtMGraphT::DFS(){bool*visited=newbool[n];for(inti=0;in;i++)visited[i]=false;for(i=0;in;i++){if(!visited[i]){DFS(i,visited);coutendl;}}delete[]visited;}templateclassTvoidExtMGraphT::DFS(intv,bool*visited){visited[v]=true;coutv;for(intu=0;un;u++)if(a[v][u]!=noEdge&&!visited[u])DFS(u,visited);}templateclassTvoidExtMGraphT::BFS(){bool*visited=newbool[n];for(inti=0;in;i++)visited[i]=false;for(inti=0;in;i++){if(!visited[i]){BFS(i,visited);}}delete[]visited;8}templateclassTvoidExtMGraphT::BFS(intv,bool*visited){SeqQueueintq(Vertices());visited[v]=true;coutv;q.EnQueue(v);while(!q.IsEmpty()){q.Front(v);q.DeQueue();for(inti=0;in;i++)if(!visited[i]&&a[v][i]!=noEdge){visited[i]=true;couti;q.EnQueue(i);}}}templateclassTintExtMGraphT::Choose(int*d,bool*s){inti,minpos;Tmin;min=INFTY;minpos=-1;for(i=0;in;i++)if(d[i]min&&!s[i]){min=d[i];minpos=i;}returnminpos;}templateclassTvoidExtMGraphT::Dijkstra(intv,T*d,int*path){inti,k,w;if(v0||vn-1)9{coutoutofbounds!endl;return;}bool*s=newbool[n];for(i=0;in;i++){s[i]=false;d[i]=a[v][i];if(i!=v&&d[i]INFTY)path[i]=v;elsepath[i]=-1;}s[v]=true;d[v]=0;for(i=0;in-1;i++){k=Choose(d,s);s[k]=true;for(w=0;wn;w++)if(!s[w]&&d[k]+a[k][w]d[w]){d[w]=d[k]+a[k][w];path[w]=k;}}}templateclassTvoidExtMGraphT::ShowDijkstra(intv,intflag){T*d=newT[n];int*path=newint[n];inttemp;Dijks

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功