●试题六阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】本题将有向网(带权有向图)定义为类AdjacencyWDigraph。类中的数据成员n表示有向网中的顶点数;a为带权邻接矩阵,用于存储有向网中每一对顶点间弧上的权值;c为二维数组,存储有向网中每一对顶点间的最短路径长度;kay为二维数组,存储最短路径,kay[i][j]=k表示顶点i 到达顶点j的最短路径必须经过顶点k。类中的主要成员函数有:Input():输入有向网的顶点数、各条弧及权值,建立带权领接矩阵a。若顶点i到

题目

●试题六

阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。

【说明】

本题将有向网(带权有向图)定义为类AdjacencyWDigraph。类中的数据成员n表示有向网中的顶点数;a为带权邻接矩阵,用于存储有向网中每一对顶点间弧上的权值;c为二维数组,存储有向网中每一对顶点间的最短路径长度;kay为二维数组,存储最短路径,kay[i][j]=k表示顶点i 到达顶点j的最短路径必须经过顶点k。类中的主要成员函数有:

Input():输入有向网的顶点数、各条弧及权值,建立带权领接矩阵a。若顶点i到顶点j有弧,则a[i][j]取弧上的权值,否则a[i][j]的值取NoEdge。

AllPairs();用弗洛伊德(Floyd)算法求有向网中每一对顶点间的最短路径长度。

OutShortestPath(int i,int j):计算顶点i到顶点j的最短路径。

outputPath(int i,int j):输出顶点i到顶点j的最短路径上的顶点。

Floyd算法的基本思想是递推地产生一个矩阵序列C0,C1,C2,…,Cn,其中C0是已知的带权邻接矩阵,a,Ck(i,j)(0≤i,j<n)表示从顶点i到顶点j的中间顶点序号不大于k 的最短路径长度。如果i到j的路径没有中间顶点,则对于0≤k<n,有Ck(i,j)=C0(i,j)=a[i][j]。递推地产生C1,C2,…,Cn的过程就是逐步将可能是最短路径上的顶点作为路径上的中间顶点进行试探,直到为全部路径都找遍了所有可能成为最短路径上的中间顶点,所有的最短路径也就全部求出,算法就此结束。

【C++代码】

#include<iostream.h>

#define NoEdge 10000 //当两个顶点之间没有边相连时,在邻接矩阵中用NoEdge表示

void Make2DArray(int * * &x,int rows,int cols);

class AdjacencyWDigraph{

private

int n;//有向网中的顶点数目

int**a;//存储顶点间弧上的权值

int**c;//存储计算出的最短路径长度

int**kay;//存储求出的最短路径

pubic:

int Vertices()const {return n;}

void AllPairs();

void Input();//输入有向网的顶点数、各条弧及权值,建立邻接矩阵a

void OutShortestPath(int i,int j);//计算顶点i到j的最短路径(试卷中未列出)

~AdjacencyWDigraph();//析构函数(试卷中未列出)

private:

void outputPath(int i,int j);

};

void AdjacencyWDigraph::AllPairs()

{int i,j,k,t1,t2,t3;

for(i=1;i<=n;k++)

for(j=1;j<=n;++j)

{c[i][j]= (1) ;kay[i][j]=0;}

for(k=1;k<=n;k++)

for(i=1;i<=n;i++){

if(i==k) continue;

t1=c[i][k];

for(j=1;j<=n;j++){

if(j==k||j==i)continue;

t2=c[k][j];t3=c[i][j];

if(t1!=NoEdge && t2!=NoEdge &&(t3==NoEdge||t1+t2<t3))

{c[i][j]= (2) ;kay[i][j]= (3) ;}

}//for

}//for

}

void AdjacencyWDigraph:: outputPath(int i,int j)

{//输出顶点i到j的最短路径上的顶点

if(i==j)return;

if(kay[i][j]==0)cout<<j<<′′;

else { outputPath(i, (4) ); outputPath( (5) );}

}

void Adjacency WDigraph::Input()

{int i,j,u,v,w,E;

cout<<″输入网中顶点个数:″;cin>>n;

cout<<″输入网中弧的个数:″;cin>>E;

Make2DArray(a,n+1,n+1);

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)a[i][j]=NoEdge;

for(i=1;i<=n;i++)a[i][i]=0;

Make2DArray(c,n+1,n+1);

Make2DArray(kay,n+1,n+1);

for(i=1;i<=E;i++){

cout<<″输入弧的信息(起点终点权值):″;cin>>u>>v>>w;a[u][v]=w;

}

}

void Make2DArray(int**&x,int rows,int cols)

{int i,j;

x=new int*[rows+1];

for(i=0;i<rows+1;i++)x[i]=new int [cols+1];

for(i=1;i<=rows;i++)

for(j=1;j<=cols;j++=x[i][j]=0;

}


相似考题
更多“●试题六 阅读以下说明和C++代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 本题将有 ”相关问题
  • 第1题:

    (a)智能网概念模型中分布功能平面模型如下图所示,请根据此图将应填入(n)处的 字句写在答题纸的对应栏内。


    正确答案:
    (1)SMF(或业务管理功能)
    (2)SCEF(或业务生成功能)
    (3)SDF(或业务数据功能)
    (4)SCF(或业务控制功能)
    (5)SSF(或业务交换功能)
    (6)CCF(或呼叫控制功能)

  • 第2题:

    阅读下列说明和C++-代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 某发票(lnvoice)由抬头(Head)部分、正文部分和脚注(Foot)部分构成。现采用装饰(Decorator)模式实现打印发票的功能,得到如图5-1所示的类图。

    【C++代码】 #include using namespace std; class invoice{ public: (1){ cout<<"This is the content of the invoice!"<

    答案:
    解析:
    (1) virtual void printInvoice() (2) ticket->printInvoice() (3) Decorator::printInvoice() (4) Decorator::printInvoice() (5) &a
    【解析】

    试题分析
    1.Invoice类下,义虛函数,按类图,函数名是printInvoice
    2.前面定义对象名是ticket,那么在ticket不为空的时候调用函数printInvoice
    3.这部分填写发票的抬头,看类图应该实现函数printInvoice ,Decorator装饰模式使用该方法
    4.这部分是发票的脚注,看类图应该实现函数printlnvoice,Decorator装饰模式使用该方法
    5.FootDecorator a(NULL) ;脚步的装饰参数是a,调用a参数,

  • 第3题:

    阅读下列说明和Java代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】 某文件管理系统中定义了类OfficeDoc和DocExplorer,当类OfficeDoc发生变化时,类DocExplorer的所有对象都要更新其自身的状态,现采用观察者(Observer)设计模式来实现该需求,所设计的类图如图6-1所示。



    答案:
    解析:
    1: void update()2: Observer3: obs.update()4: Subject5: Attach(this)

  • 第4题:

    阅读下列说明和 C ++代码,将应填入(n)处的字句写在答题纸的对应栏内。【说明】某软件公司欲开发一款汽车竞速类游戏,需要模拟长轮胎和短轮胎急刹车时在路面上留 下的不同痕迹,并考虑后续能模拟更多种轮胎急刹车时的痕迹。现采用策略(Strategy)设计模式来实现该需求,所设计的类图如图 6-1 所示。

    【C++ 代码】#includeusing namespace std;class BrakeBehavior{public:(1) ; /*其余代码省略*/};class LongWheelBrake : public BrakeBehavior{public:void stop(){cout <<"模拟长轮胎刹车痕迹! "<< end1;} /*其余代码省略*/};class ShortWheelBrake : public BrakeBehavior{public:void stop(){cout<"模拟短轮胎刹车痕迹! "<< end1;} /*其余代码省略*/};class Car{protected: (2) wheel;public:void brake(){ (3) ; } /*其余代码省略*/};class ShortWheelCar : public Car{public:ShortWheelCar(BrakeBehavior* behavior){ (4);} /*其余代码省略*/};int main(){BrakeBehavior* brake= new ShortWheelBrake();ShortWheelCar car1(brake):car1. (5) ;return 0;}


    答案:
    解析:
    1. virtual void stop( )=02. BrakeBehavior*3. Wheel->stop( )4. wheel=behavior5. brake( )

  • 第5题:

    阅读下列说明和C++代码,回答问题,将解答填入答题纸的对应栏内。
    【说明】某航空公司的会员积分系统将其会员划分为:普卡 (Basic)、银卡(Silver)和金卡 (Gold) 三个等级。非会员 (NonMember) 可以申请成为普卡会员。会员的等级根据其一年内累积 的里程数进行调整。描述会员等级调整的状态图如图 5-1 所示。现采用状态 (State) 模式实现上述场景,得到如图 5-2 所示的类图。




    【问题1】(15分)阅读上述说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。


    答案:
    解析:
    注意:原版的题目应该是Cbasic、CSilve。(1) virtual double travel(int miles,FrequentFlyer* context)=0(2)context->setState(context->Cbasic)(3)context->setState(context->CSilve)(4)context->setState(context->Cbasic)(5)context->setState(context->CSilve)

  • 第6题:

    阅读下列说明和?C++代码,将应填入(n)处的字句写在答题纸的对应栏内。
    【说明】
    阅读下列说明和?Java代码,将应填入?(n)?处的字句写在答题纸的对应栏内。
    【说明】
    某快餐厅主要制作并出售儿童套餐,一般包括主餐(各类比萨)、饮料和玩具,其餐品种
    类可能不同,但其制作过程相同。前台服务员?(Waiter)?调度厨师制作套餐。现采用生成器?(Builder)?模式实现制作过程,得到如图?6-1?所示的类图。






    答案:
    解析: