问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

对给定的图结构和起点,产生其所有的深度优先搜索遍历序列

发布网友 发布时间:2022-05-30 21:55

我来回答

1个回答

热心网友 时间:2023-11-23 04:59

注释非常详细,希望对你有所帮助!
#include <stdlib.h>
#include <stdio.h>

struct node /* 图顶点结构定义 */
{
int vertex; /* 顶点数据信息 */
struct node *nextnode; /* 指下一顶点的指标 */
};
typedef struct node *graph; /* 图形的结构新型态 */
struct node head[9]; /* 图形顶点数组 */
int visited[9]; /* 遍历标记数组 */

/*根据已有的信息建立邻接表*/
void creategraph(int node[20][2],int num)/*num指的是图的边数*/
{
graph newnode; /*指向新节点的指针定义*/
graph ptr;
int from; /* 边的起点 */
int to; /* 边的终点 */
int i;

for ( i = 0; i < num; i++ ) /* 读取边线信息,插入邻接表*/
{
from = node[i][0]; /* 边线的起点 */
to = node[i][1]; /* 边线的终点 */

/* 建立新顶点 */
newnode = ( graph ) malloc(sizeof(struct node));
newnode->vertex = to; /* 建立顶点内容 */
newnode->nextnode = NULL; /* 设定指标初值 */
ptr = &(head[from]); /* 顶点位置 */
while ( ptr->nextnode != NULL ) /* 遍历至链表尾 */
ptr = ptr->nextnode; /* 下一个顶点 */
ptr->nextnode = newnode; /* 插入节点 */
}
}

/* 图的深度优先搜寻法 */
void dfs(int current)
{
graph ptr;
visited[current] = 1; /* 记录已遍历过 */
printf("vertex[%d]\n",current); /* 输出遍历顶点值 */
ptr = head[current].nextnode; /* 顶点位置 */
while ( ptr != NULL ) /* 遍历至链表尾 */
{
if ( visited[ptr->vertex] == 0 ) /* 如过没遍历过 */
dfs(ptr->vertex); /* 递回遍历呼叫 */
ptr = ptr->nextnode; /* 下一个顶点 */
}
}

int main()
{
graph ptr; /* 边线数组 */
int node[20][2] = { {1, 2}, {2, 1},
{1, 3}, {3, 1},
{1, 4}, {4, 1},
{2, 5}, {5, 2},
{2, 6}, {6, 2},
{3, 7}, {7, 3},
{4, 7}, {4, 4},
{5, 8}, {8, 5},
{6, 7}, {7, 6},
{7, 8}, {8, 7} };
int i;
for ( i = 1; i <= 8; i++ ) /* 顶点数组初始化 */
{
head[i].vertex = i; /* 设定顶点值 */
head[i].nextnode = NULL; /* 指针为空 */
visited[i] = 0; /* 设定遍历初始标志 */
}

creategraph(node,20); /* 建立邻接表 */
printf("Content of the gragh's ADlist is:\n");
for ( i = 1; i <= 8; i++ )
{
printf("vertex%d ->",head[i].vertex); /* 顶点值 */
ptr = head[i].nextnode; /* 顶点位置 */
while ( ptr != NULL ) /* 遍历至链表尾 */
{
printf(" %d ",ptr->vertex); /* 印出顶点内容 */
ptr = ptr->nextnode; /* 下一个顶点 */
}
printf("\n"); /* 换行 */
}
printf("\nThe end of the dfs are:\n");
dfs(1); /* 打印输出遍历过程 */
printf("\n"); /* 换行 */

system("pause");
return 0;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何查被录取到的专业 怎样查被录取的专业 录取后怎样查询录取的专业 录取专业怎么查 已被录取怎么查专业 ghs网络语什么意思_ghs网络语意思出处含义介绍 纸箱企业管理软件 ghs什么意思网络(ghs什么意思网络用语) 《喜羊羊与灰太狼》大结局 0与任何数相加都得原数吗? setuo file&#39;gameinfo.txt&#39;doesn&#39;t exist in sudirectoryh12&#39;check your game parameter or VCONFIG settin 使用nuke软件时,在node graph 节点标签中 半条命2游戏NPC不动 Node Graph Rebuiding AIDisable补丁怎样下载 各位老师JAVAscript如何写两个数组:node和link,并输入到graph&#39;中 我玩半条命2时自动存档会出现“Node Graph out of Date,Rebuilding”让后出现错误提示让后就被强制退出了 探歌1.4t能爆表吗 一汽大众探歌有没有2.0t的车型 探歌的发动机会用1.5t的吗? 大便干燥吃益生菌有用吗? 有看过《星河战队》(又名《星舰战将》)的朋友吗?找其中一首插曲…… 《画心》中的“你”和“我”分别指谁? 那位知道电影&lt;&lt;即时引爆&gt;&gt;插曲? 有谁像我一样这么有深度,迷上移魂都市那2首插曲的 经常采耳好吗? 采耳师为什么工资那么高呢? 采耳需要哪些工具原图 经常采耳的人,最后都这么样了? 古代贵妃死后丫鬟陪葬吗? 古代帝王死亡宫女陪葬是灌注水银吗 古代帝王下葬的规模庞大,为帝王殉葬的宫女在活着的最后时刻经历了什么? New=(Graph)malloc(sizeof(struct Node)); 请教我一下这句话的意思是什么 抖音整改会不会作品还有绑定的手机号和粉丝会丢吗 爆枪英雄90级红光武器战斗力 爆枪英雄战斗力应要做什么才能变强 爆枪英雄90级战力一般是多少 爆枪英雄散弹怎么发挥最大战斗力 家里住小燕子好不好? 家中住燕子好吗 燕子住在家里好吗 家里住燕子好吗 家里住什么燕子最好 我家住的燕子和鸽子好不好? 家里住了两窝燕子,这样好不好? 家里住燕子好不好?谢谢! 漏电断路器型号NB1LE-40什么意思? 漏电断路器中的NB1LE与DZ47LE有什么区别?精确性哪个更高些呢? 吸血鬼日记的肖恩和海莉目的是什么?他们想干什么? 正泰NB1L型剩余电流动作断路器和NB1LE型漏电断路器有什么区别吗?哪个保护功能全一些,抗干扰和性能稳定些 每天吃5袋猫耳朵会胖吗 吸血鬼要不要放过肖恩