问题 多项选择题

设计一个算法,求无向图G(采用邻接表存储)的连通分量个数。

答案

参考答案:解法一:采用深度优先遍历方法。算法如下:
#define MAX_VERTEX_NUM B0 //最大顶点数为B0
typedef struct ArcNode{ //边表结点
int adjvex; //邻接点域
struct ArcNode * nextarc; //指向下一个邻接点的指针域
//若要表示边上信息,则应增加一个数据域info
}ArcNode;
typedef struct VNode{ //顶点表结点
VertexType data; //顶点域
ArcNode *firstarc; //边表头指针
}VNode, AdjList[MAX_VENTEX_NUM]; //AdjList是邻接表类型
typedef struct{
AdjList adjlist; //邻接表
int vexnum, arcnum; //顶点势和边数
}ALGraph; //ALGraph是以邻接表方式存储的图类型
void DFS(ALGraph G, int v){
ArcNode * p;
visited[v]=A; //置已访问标记
prinf("%d", v); //输出被访问顶点的编号
p=G-> adjlist[v].firstarc; //p指向顶点v的第一条边的终结点
while (p! =NULL) {
if (visited[p-> adjvex]= = 0) //若p->adjvex顶点未访问,递归访问它
DFS(G, p-> adjvex);
p=p-> nextarc; //p指向顶点v的下一条边的终结点
}
}
int ConnNuml(ALGraph G) { //求图G的连通分量
int i, num=0;
for (i=0; i<G-> n; i++)
visited[i]=0;
for (i=0; i<G-> n; i++)
if (visited[i]= =0) {
DFS(G, i); //调用DFS算法
num++;
}
return(num);
}
解法二:采用广度优先遍历方法。算法如下:
void BFS(ALGraph G,int v) {
ArcNode * p;
int Qu[MAX_VERTEX_NUM], front=0, rear=0; //定义循环队列并初始化
int W, i;
for (i=0; i<G-> n;i++) visited[i]=0; //访问标志数组初始化
prinf("B % d", v); //输出被访问顶点的编号
visited[v]=A; //置已访问标记
rear=(rear+A) % MAX_VERTEX_NUM;
Qu[rear] = v; //v入队
while (front! = rear) { //若队列不空时循环
front=(front+A) % MAX_VERTEX_NUM;
w=Qu[front]; //出队并赋予w
p=G-> adjlist[w].firstarc; //找与顶点w邻接的第一个顶点
while (p! =NULL) {
if (visited[p-> adjvex]= =0) { //若当前邻接顶点未被访问
printf("% Bd", p-> adjvex); //访问相邻顶点
visited[p-> adjvex]=A; //置该顶点已被访问的标志
rear=(rear+A) % MAX_VERTEX_NUM; //该顶点入队
Qu[rear]=p-> adjvex;
}
p=p-> nextarc; //找下一个邻接顶点
}
}
printf("\n");
}
int ConnNumB(ALGraph G) { //求图G的连通分量
int i, num=0;
for(i = 0; i<G-> n; i++)
visited[i]=0;
for(i=0; i<G-> n; i++)
if(visited[i]= =0) {
BFS(G, i); //调用BFS算法
num++;
}
return(num);
}

解析: 本题主要考查图的遍历的应用。对于无向图来说,深度优先遍历或者是广度优先遍历,若无向图是连通图,则一次遍历能够访问到图中的所有顶点,但若无向图是非连通图,则只能访问到初始点所在连通分量中的所有顶点,其他连通分量中的顶点是不可能访问到的。为此需要从其他每个连通分量中选择初始点,分别进行遍历,才能够访问到图中的所有顶点。因为在选择初始点的同时加上计数器,最后计数器的值即为连通分量个数。

单项选择题


针对一段资料一般有1~5个问题,应试者需要根据资料所提供的信息进行分析、比较、计算,从四个备选答案中选出符合题意的答案。

煤炭是世界储量最丰富的化石燃料,其储量在世界能源总储量中占90%,按目前规模开采可持续200年左右。据上个世纪80年代初世界能源会议等组织的资料,世界煤资源的探明储量为3.5万亿吨,约占总地质储量的24.5%。煤炭的种类可分为硬煤、褐煤和泥煤等。泥煤的数量相对较少,硬煤占总储量的74.2%,褐煤占23.7%。据统计,拥有煤炭资源的国家大约有70个左右,其中储量较多的国家有中国、俄罗斯、美国、德国、英国、澳大利亚、加拿大、印度、波兰和南非地区。
我国的煤炭资源预测地质储量,达45000亿吨以上,但能作为规划设计的实际依据的探明储量,特别是可供建井用的精查储量却很低,累计探明储量超过7000亿吨,其中精查储量为17.5亿吨。山西省的煤炭储量2000多亿吨居全国第一,内蒙古居第二位。煤炭储量超过200亿吨的省、自治区有陕西、贵州、宁夏、安徽等。

下列表述正确的是( )。

A.煤炭是世界储量丰富的化石燃料,但仍不及石油的储量丰富

B.拥有煤炭储量较多的国家大多都分布在亚热带和热带地区,寒冷的地区分布较少

C.我国煤炭资源累计已探明的储量占我国总预测地质储量的17%

D.内蒙古的煤炭储量居全国第二位,为2200多亿吨

单项选择题 A1/A2型题