西工大计算机实习报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机实习报告

一、趣味题

彩色的圆环:

分析图形可知,一共有n个同心圆,外面大圆n等分,然后从每个等分点作所有同心圆的两条切线。如果用极坐标表示,可以很容易求解切点,代码如下所示:

n=10; %同心圆数量

m=40; %等分点数

R=1; %外圆半径

s=0:0.01*pi:2*pi; %控制圆的光滑程度的极坐标角度

t=0:2*pi/m:2*pi; %等分点极坐标角度

x0=R*cos(t);y0=R*sin(t); %等分点直角坐标

color=['b','r','c','g','m','y']; %画图颜色

lc=length(color); %颜色数量长度,超出后从头开始

for i=1:n %开始同心圆循环

r=R/n*i; %当前同心圆半径

a=acos(r/R); %切线与圆心线角度(弧度制)

x1=r*cos(t-a);y1=r*sin(t-a); %任意等分点相对当前同心圆的第一个切点

x2=r*cos(t+a);y2=r*sin(t+a); %任意等分点相对当前同心圆的第二个切点

plot(r*cos(s),r*sin(s),color(mod(i,lc)+1));hold on; %画同心圆for j=1:m %对每一个等分点循环

plot([x0(j),x1(j)],[y0(j),y1(j)],color(mod(i,lc)+1));hold on;

%第一条切线

plot([x0(j),x2(j)],[y0(j),y2(j)],color(mod(i,lc)+1)); hold on; %第二条切线

end

end

axsi equal; %横纵坐标比例一致

实验绘图结果如下图所示:

二、算法题

求无向图的最短路径(Dijkstra算法):

实验原理分析、原理及代码如下所示(此实验代码不仅包含了实验所要求的求带权无向图最短路径,我还拓展了求有向、无向、带权有向图最短路径的内容):

#include

#include

using namespace std;

#define wuqiong 0

class tu

{

public:

int chazhao(int);//查找

void zjdingdian(int x);//增加顶点

tu();

void zengjia();//控制增加弧边和点

void zjhubian();//增加弧边

void bianli();//控制遍历

void shendu(int );//深度

void guangdu(int );//广度

void jindui(int );//进队列

int chudui();//出对了

bool pankong();//判空

//上面所有的函数与邻接矩阵有关

void zxgouzao();//初始化与最小路劲有关的东东void zxshuchu();//求S中的最小路劲private:

int kind; //类图;

int length; // 顶点个数

int *dingdian; //顶点

int *juzhen; //矩阵

int num;//最大顶点数目

int* visted;//访问情况

int *duilie;//模拟队列

int duichang;//队列长度

//上面所有的变量与邻接矩阵有关

int *s;//存放当前顶点

int slength;//当前顶点的长度

int* dist;//存放最小路劲

int* pre;//存放路劲;

int* final;//存放顶点

};

tu::tu()//初始化图

{

cout<<"请输入图的种类1:有向.2:无向.3:带权有向.4:带权无向"<>kind;

cout<<"请输入图的顶点数目"<

cin>>num;

dingdian = new int[num];//为顶点分配内存保存

juzhen = new int[num*num];//产生矩阵

if(kind==1||kind==2)//为无权图初始化矩阵

{

for(int i =0;i

juzhen[i] = 0;

}

else//有权图初始化矩阵

{

for(int i =0;i

juzhen[i] = wuqiong;

}

length = 0;

}

//增加顶点

void tu::zjdingdian(int x)

{

if(chazhao(x)!=-1||length==num)

cout<<"图内有此顶点或图内无空间可插入,插入失败"<

else

{

dingdian[length] = x;

length++;

}

}

//增加边

void tu::zjhubian()

{

int i;//弧头

int j;//弧尾

if(kind==1||kind==2)//无权图

{

cout<<"请输入弧的头和尾"<

cin>>i>>j;

if(kind == 1)//有向图

{

juzhen[i*num+j]=1;

相关文档
最新文档