问题 问答题

【说明】[程序6说明]单源最短路径的分支限界算法。const int MAXNUM=29999;#include<iostream>#include<vector>#include<algorithm>#include<functional>using namespace std;template <class VertexType,class EdgeType>class MinNode {//程序中使用的最小化堆的结点说明friend class Graph<VertexType,EdgeType>public:MinNode (int nl, EdgeType length1){ VexNum=nl;length=length1;}bool operator>(const MinNode<VertexType,EdgeType>&p)const{ return (1) >p.length;}private: int VexNum;//记录源点序号,序号数组p及distance下标相一致。源点为初始扩展顶点 EdgeType length;//记录源点到本顶点的当前最短路径的长度,源点到自身的长度为0}template<class VertexType,classEdgeType>void Graph<VertexType,EdgeType>:: shortestpath(VertexType start) { int j,k,source;//source 记录源点的序号。 EdgeType*distance= (2) ; int*p=new int[MaxNumVertex]; vector<MinNode<VertexType,EdgeType> >H; for(source=0;source<MaxNumVertex;source++) { if(NodeList[source]==start)break;} if (source>=MaxNumVertex){cout<<”This is error!”<<end1;return;} MinNode<VertexType,Edge Type> (3) ; for(k=0;k<MaxNumVertex;k++) { distance[k]:MAXXUM; //记录源点到本顶点k的最终的最短路径的长度 p[k]=source; //记录最短路径上的本顶点的直接前驱顶点的序号 } distance[source]=0;p[source]=-1;//m 是源点,前一顶点不存在 vector<MinNode<VertexType, EdgeType>>::iterator q; while(1){ for(j=0;j<MaxNumVertex;j++)if((AdjMatrix[E.VexNum* MaxNumVertex+j]<MAXNUM)&&( (4) <distance[j])){ distance[j]=E.length+AdjMatrix[E.VexNum* MaxNumVertex+j]; p[j]=E. VexNum;//记录顶点j的前一顶点 MinNode<VertexType, EdgeType> (5) ; H.push_ back(N); push_heap(H. begin(),H.end(),greater<MinNode<VertexType, EdgeType>>());}if(H.empty()=true)break;//若优先队列为空,那么算法结束else{ pop_ heap(H.begin(),H. end(),greater<MinNode<VertexType, EdgeType>>()); q=H.end()-1; //从最小化堆中取路径最短的顶点 E=*q; H.pop_ back(); //删除从最小化堆中“挤”出的顶点 }} //end whilefor(k=0;k<MaxNumVertex;k++){ cout<<"Shorstest path from vertex"<<k<<"is"<<distance[k]<<end1; j=k;cout<<"All vertices are:"; while(j!=source){cout<<j<<"->";j=p[j];} cout<<source<<”.”<<end1;} //打印顶点的最短路径长度和至源点的最短路径上经过的顶点序列return;}

答案

参考答案:

解析: (1)this->length或(*this).length 操作符,的成员函数,比较两个对象的最短路径的长度length,大于则返回真(1)。 (2)new EdgeType[MaxNumVertex] 动态申请EdgeType类的对象数组distance,长度为MaxNumVertex,存放最短路径的长度。 (3)E(source,0) 定义最小化堆模板类MinNode<VertexType, EdgeType>的对象E(source,0)。 (4)E.length+ AdjMatrix [E. VcxNum* MaxNumVertex+j] 若E.length+ AdjMatrix [E.VexNum*MaxNumVertex+j]小于distance[j],则distance[j]取这个更小值。 (5)N(j,distance[j]) 定义最小化堆模板类MinNode<VertexType,EdgeType>的对象N(j,distance[j])。

综合题

在对“中国古代的皇帝制度”开展研究性学习时,某班同学是从以下三方面开展开的

方法一 史料研习

材料一 ……始皇帝幸梁山宫,从山上见丞相车骑众,弗善也。中人或告丞相,丞相后损车骑。始皇怒曰:“此中人泄吾语。”案问莫服。当是时,诏捕诸时在旁者,皆杀之。自是后莫知行之所在。

——司马迁《史记》卷六《秦始皇本纪》

(1)从材料一中,我们可以看出皇帝有怎样的态度或做法?分析其本质。(4分)

材料二 宰相之职,佐天子总百官、治万事,其任重矣。然自汉以来,位号不同,而唐世宰相,名尤不正。初,唐因隋制,以三省之长中书令、侍中、尚书令工共议国政,此宰相职也。其后,以大宗尝为尚书令,臣下避不敢居其职,由是仆射为尚书省长官,与侍中、中书令号为宰相,其品位既崇,不欲轻以授人,故常以他官居宰相职,而假以他名。自太宗时,社淹以吏部尚书参议朝政,魏征以秘书监参与朝政,其后或曰“参议得失”“参知政事”之类,其名非一,皆宰相职也。

——欧阳修《新唐书》卷四六《职官志》

材料三 国初定制,设议政王大臣数员,皆以满臣充之。凡军国重务不由阁臣票发者,皆交议政大臣会议。每朝期,坐中左门外会议,如坐朝仪。雍正中设立军机处,议政之权遂微,然犹存其名以为满大臣兼衔。乾隆壬子,纯皇帝特旨裁之。

——昭梿《啸亭杂录》卷四《议政大臣》

(2)材料二反映了隋唐时期宰相制度具有怎样的特点?材料三反映了清初议政王大臣会议的权力如何?根据议政王大臣会议机构权力演变的过程说明其权力发生了怎样的转移。(5分)

方法二 规律认识

(3)汉、唐、明、清是中国历史上四个统一的封建王朝,其中中枢权力机构的演变过程为:内朝—三省六部—内阁—军机处。据此归纳出皇帝集权的两种方式及其作用。(4分)

方法三 观点探讨

材料四 皇权至高无上而无所不统的属性,使得全体臣民都是皇权统治和奴役的对象,没有平等可言。在皇帝制度创立后的历史中,皇权意识不断地膨胀却缺乏对其应有的制约与限制。正因为如此,在历史上才会出现不少皇帝滥用权力的现象,给社会造成了巨大的伤害。

——赵斌《浅析中国古代皇帝制度的利与弊》

(4)结合材料四的观点及所学知识谈谈你对皇帝制度的认识(2分)

多项选择题