如图所示,给出由7个顶点组成的无向图。从顶点1出发,对它进行深度优先搜索得到的顶点序列是(

  1. 如图所示,给出由7个顶点组成的无向图。从顶点1出发,对它进行深度优先搜索得到的顶点序列是(a  )。
    A.1 3 5 4 2 6 7 B.1 3 4 7 6 2 5
    C.1 5 3 4 2 7 6 D.1 2 4 7 6 5 3

img


这个深度优先搜索遍历,C选项不也可以吗

参考 https://blog.csdn.net/wd1603926823/article/details/128782281 可知:
对于答案A:

    1入;
1出,3入;
3出,5入;
5出,4入;
4出,2入;
2出,6入;
6出,7入;
7出。    顶点已出完,结束搜索。
所以顺序是:1 3 5 4 2 6 7

对于答案B:顶点3 后还有接班人5 ,而它直接跳到了4,所以错误。
对于答案C:

    1入;
1出,5入;
5出,3入;
3出,    (3已没有接班人,故此根枝条已捋到底)
        (需返回上级5,发现有新分叉枝条4、6均未入队过,所以我们先入4)
     4入;
4出,2入;
2出,7入;
7出,6入;
6出。     顶点已出完,结束搜索。
所以顺序是:1 5 3 4 2 7 6

对于答案D:顶点4还有接班人即未捋到底,而它直接跳到了7 ,所以错误。
故答案是AC,我觉得你的标准答案A不正确。只能说A是树不分叉的深度优先搜索选择,因为C虽然也正确但树有一个分叉。

  • 这篇文章讲的很详细,请看:某企业每月给其A、B、C 和D 四个门店一共发送6 个集装箱的某种货物,如果各门店出售该种货物的利润(万元)如下表:
  • 除此之外, 这篇博客: C语言编程题中的 18.编写程序,已知一个整数数列A中的每个项为其前3个项之和, 请输入数列前3项的值,求此数列的前30项,要求:前3项的值由键盘 输入,如输入1,2,3则数列为1 2 3 6 11 20 37 … 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    int main() {
    	int arr[31];
    	for (int i = 0; i < 3;i++) {
    		printf("请输入第%d项:",i+1);
    		scanf_s("%d",&arr[i]);
    	}
    	for (int i = 3; i < 30; i++) {
    		arr[i] = arr[i - 1] + arr[i - 2] + arr[i - 3];
    	}
    	for (int i = 0; i < 30; i++) {
    		printf("%d ", arr[i]);
    	}
    	printf("\n");
    	return 0;
    }