1、测绘软件实习报告测 绘 软 件 设 计 与 实 现2011年11月15日实验一 图的创建、遍历及其MST的构建一、实验目的通过上机实践,进一步了解图的创建、遍历及其MST的构建,巩固所学课本知识。二、实验过程#include#include#include#define INF 32767#define MAXV 100typedef int InfoType;typedef struct int no; InfoType info;VertexType;typedef struct int edgesMAXVMAXV; int n,e; VertexType vexsMAXV;MGraph;
2、typedef struct ANode int adjvex; struct ANode *nextarc; InfoType info;ArcNode;typedef int Vertex;typedef struct Vnode Vertex data; ArcNode *firstarc;VNode;typedef VNode AdjListMAXV;typedef struct AdjList adjlist; int n,e;ALGraph;void MatToList(MGraph g,ALGraph *&G) int i,j,n=g.n; ArcNode *p; G=(ALGr
3、aph *)malloc(sizeof(ALGraph); for(i=0;iadjlisti.firstarc=NULL; for(i=0;i=0;j-) if(g.edgesij!=0) p=(ArcNode *)malloc(sizeof(ArcNode); p-adjvex=j; p-info=g.edgesij; p-nextarc=G-adjlisti.firstarc; G-adjlisti.firstarc=p; G-n=n; G-e=g.e;void ListToMat(ALGraph *G,MGraph &g) int i,j,n=G-n; ArcNode *p; for(
4、i=0;in;i+) for(j=0;jn;j+) g.edgesij=0; for(i=0;iadjlisti.firstarc; while(p!=NULL) g.edgesip-adjvex=p-info; p=p-nextarc; g.n=n; g.e=G-e;void DispMat(MGraph g) int i,j; int zz=99; for(i=0;ig.n;i+) for(j=0;jg.n;j+) if(g.edgesij=INF) printf(%3s, ); else printf(%3d,g.edgesij); printf(n); void DispAdj(ALG
5、raph *G) int i; ArcNode *p; for(i=0;in;i+) p=G-adjlisti.firstarc; if(p!=NULL) printf(%3d,i); while(p!=NULL) printf(%3d,p-adjvex); p=p-nextarc; printf(n); ;int visitedMAXV;void DFS(ALGraph *G,int v) ArcNode *p; visitedv=1; printf(%3d,v); p=G-adjlistv.firstarc; while(p!=NULL) if(visitedp-adjvex=0) DFS
6、(G,p-adjvex); p=p-nextarc; void DFS1(ALGraph *G,int v) ArcNode *p; ArcNode *StMAXV; int top=-1,w,i; for(i=0;in;i+) visitedi=0; printf(%3d,v); visitedv=1; top+; Sttop=G-adjlistv.firstarc; while(top-1) p=Sttop; top-; while(p!=NULL) w=p-adjvex; if(visitedw=0) printf(%3d,w); visitedw=1; top+; Sttop=G-ad
7、jlistw.firstarc; break; p=p-nextarc; printf(n);void BFS(ALGraph *G,int v) ArcNode *p; int queueMAXV,front=0,rear=0; int visitedMAXV; int w,i; for(i=0;in;i+) visitedi=0; printf(%3d,v); visitedv=1; rear=(rear+1)%MAXV; queuerear=v; while(front!=rear) front=(front+1)%MAXV; w=queuefront; p=G-adjlistw.fir
8、starc; while(p!=NULL) if(visitedp-adjvex=0) printf(%3d,p-adjvex); visitedp-adjvex=1; rear=(rear+1)%MAXV; queuerear=p-adjvex; p=p-nextarc; printf(n);void Prim(MGraph g,int v) int lowcostMAXV,min,n=g.n; int closestMAXV,i,j,k; for(i=0;in;i+) lowcosti=g.edgesvi; closesti=v; for(i=0;in-1;i+) min=INF; for
9、(j=0;jn;j+) if(lowcostj!=0&lowcostjmin) min=lowcostj; k=j; printf(边(%d,%d)权为:%dn,closestk,k,min); lowcostk=0; for(j=0;jn;j+) if(g.edgeskj!=0&g.edgeskjlowcostj) lowcostj=g.edgeskj; closestj=k; /typedef struct int u; int v; int w;Edge;void SortEdge(MGraph g,Edge E) int i,j,k=0; Edge temp; for(i=0;ig.n
10、;i+) for(j=0;jg.n;j+) if(g.edgesijINF) Ek.u=i; Ek.v=j; Ek.w=g.edgesij; k+; for(i=0;i=0&temp.wEj.w) Ej+1=Ej; j-; E+1=temp; void Kruskal(Edge E,int n,int e) int i,j,m1,m2,sn1,sn2,k; int vsetMAXV; for(i=0;in;i+) vseti=i; k=1; j=0; while(kn) m1=Ej.u; m2=Ej.v; sn1=vsetm1; sn2=vsetm2; if(sn1!=sn2) printf(
11、%d,%d):%dn,m1,m2,Ej.w); k+; for(i=0;in;i+) if(vseti=sn2) vseti=sn1; j+; /void main() int i,j,u=3; MGraph g,g1; ALGraph *G; Edge EMAXV; int BMAXV11; int AMAXV6=0,5,0,7,0,0,0,0,4,0,0,0,8,0,0,0,0,9,0,0,5,0,0,6,0,0,0,5,0,0,3,0,0,0,1,0; g.n=6; g.e=10; for(i=0;ig.n;i+) for(j=0;jg.n;j+) g.edgesij=Aij; prin
12、tf(n); printf(图G的邻接表:n); MatToList(g,G); DispAdj(G); printf(图G的邻接表转换成邻接矩阵n); ListToMat(G,g1); DispMat(g1); printf(从顶点0开始的DFS(递归算法) :n); DFS(G,0); printf(n); printf(从顶点0开始的DFS(非递归算法) :n); DFS1(G,0); printf(从顶点0开始的BFS(递归算法) :n); BFS(G,0); printf(n); for(i=0;ig.n;i+) for(j=0;jg.n;j+) Bij=INF; B01=1; B0
13、2=4; B03=12; B05=2; B12=8; B23=5; B25=9; B34=3; B45=7; for(i=0;ig.n;i+) for(j=0;jg.n;j+) Aji=Aij; for(i=0;ig.n;i+) for(j=0;jg.n;j+) g.edgesij=Bij; printf(n); printf(n); printf(普里姆算法求解结果:n); Prim(g,0); printf(n); SortEdge(g,E); printf(n); printf(n); printf(克鲁斯卡尔算法求解结果:n); Kruskal(E,g.n,g.e); printf(n
14、);三、实验成果四、实验体会通过此次上机实践,基本上掌握了图的创建过程,对于程序设计,在设计过程中遇到很多问题,但是通过相互讨论及老师指导,已经基本掌握了基于深度优先的图的遍历算法的设计与实现、基于广度优先的图的遍历算法的设计与实现、基于Prim算法的最小生成树的构建、基于Kruskal算法的最小生成树的构建。实验二 快速排序算法的实现一、实验目的通过上机实践巩固课堂所学快速排序算法相关知识,通过讨论,同学之间相互学习,彻底了解实验内容,完成实验作业。二、实验过程#includevoid XXXquicksort(int data,int low,int high) int i,pivot,j
15、; if(lowhigh) pivot=datalow; i=low; j=high; while(ij) while(i=pivot) j-; if(ij) datai+=dataj; while(ij&datai=pivot) i+; if(ij) dataj-=datai; datai=pivot; XXXquicksort(data,low,i-1); XXXquicksort(data,i+1,high); void main() int a6; int i; cout请输入待排序数组endl; for(i=0;iai; coutendl; cout由输入得结果为:endl; for
16、( i=0;i6;i+) coutai ; coutendl; XXXquicksort(a,0,5); cout快速排序后的结果为:endl; for( i=0;i6;i+) coutai ; coutendl;三、实验成果四、实验体会此次上机实践主要是实现快速排序算法,这个实验相对于其他实验,比较简单,做起来问题不是很多,经过几次调试,基本上就能完成。实验三 矩阵类的设计与实现一、实验目的通过上机实践,巩固课堂老师所讲关于矩阵设计的知识,通过反复的调试,找错,设计出矩阵。二、实验过程#include#include#include#includeclass XXXMatrixprivate
17、: int rows,columns; double *element;public: XXXMatrix(int rows=4,int columns=4); XXXMatrix(int *mat,int rows,int columns); XXXMatrix(const XXXMatrix& m); XXXMatrix(); int rintv(int n,double a4); XXXMatrix& inverse(XXXMatrix& mat); XXXMatrix& transpose(double a4); void init(int rows,int columns); dou
18、ble get(int i,int j); bool set(int i,int j,int value); friend ostream& operator (ostream& out,XXXMatrix &mat); XXXMatrix& operator +=(XXXMatrix& mat); XXXMatrix& operator=(const XXXMatrix& mat); bool operator=(const XXXMatrix& mat); bool operator!=(const XXXMatrix& mat); XXXMatrix& operator-(XXXMatr
19、ix& mat); XXXMatrix& operator-(); XXXMatrix& operator*(XXXMatrix& mat);void XXXMatrix:init(int rows,int columns) if(rows=0|columnsrows=rows; this-columns=columns; element=new double *rows; for(int i=0;irows;i+) elementi=new doublecolumns; for(int j=0;jcolumns;j+) elementij=0; XXXMatrix:XXXMatrix(int
20、 rows,int columns) init(rows,columns);XXXMatrix:XXXMatrix(int *mat,int rows,int columns) init(rows,columns); for(int i=0;irows;i+) for(int j=0;jcolumns;j+) elementij=*(mat+i*columns+j);XXXMatrix:XXXMatrix(const XXXMatrix& m) init(m.rows,m.columns); for(int i=0;im.rows;i+) for(int j;jm.columns;j+) el
21、ementij=m.elementij;XXXMatrix:XXXMatrix() for(int i=0;i=0&i=0&j=0&i=0&jcolumns) elementij=value; return true; return false;ostream& operator(ostream& out,XXXMatrix& mat) out矩阵 XXXMatrix(mat.rowsxmat.columns)endl; for(int i=0;imat.rows;i+) for(int j=0;jmat.columns;j+) outmat.elementij ; outrows=mat.r
22、ows&this-columns=mat.columns) for(int i=0;imat.rows;i+) for(int j=0;jrows=mat.rows&this-columns=mat.columns) for(int i=0;imat.rows;i+) for(int j=0;jelementij!=mat.elementij) break; return false; else return true; bool XXXMatrix: operator!=(const XXXMatrix& mat) if(this-rows=mat.rows&this-columns=mat.columns) for(int i=0;imat.rows;i+) for(int j=0;jelementij=mat.elementij) break; return false; else return true; XXXMatrix& XXXMatrix: operator-( XXXMatrix& mat) if(this-rows=mat.rows&this-columns=mat.columns) for(int i=0;imat.rows;i+
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1