深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc

本文提供了一个C语言程序,用于实现无向非连通图的邻接表存储结构,并使用深度优先搜索(DFS)和广度优先搜索(BFS)遍历图。程序还包含了查找给定两点间路径长度为k的简单路径的功能。程序包括图的建立、遍历以及路径查找算法,适用于图论和算法学习。
摘要由CSDN通过智能技术生成

C语言实现的图的深度搜索与广度搜索程序

C语言实现的图的深度搜索与广度搜索程序

/*

上机试验5-图的建立和遍历

1)建立【无向】【非连通】图的邻接表存储结构,要求顶点个数不少于15个。

2)用DFS及BFS对此邻接表进行遍历,打印出两种遍历的顶点访问顺序。

3)给定图中任意两个顶点v1和v2及整数k,判断是否存在从v1到v2的路径长度为k的简单路径,若有打印出路径上的顶点序列(要求路径上不含回路)。

进一步:找出从v1到v2的所有路径长度为k的【简单】路径。(简单路径是指:顶点序列中不含【重现】的顶点的路径。)

*/

#include

#include

#include

#define PointNum 15

using namespace std;

struct V{

int vertex;

int distance;

int sign;

struct V* next;

}Vertex[PointNum+1];

int P[PointNum];

int union_find(int x) // 并查集

{

while(P[x]!=x)x=P[x];

return x;

}

void DFS(int vertex_);

void BFS(int vertex_);

int DFS(int V1, int V2, int V3, int kn);

int lujing[PointNum+1],lujing_I;

int main()

{

int times,vertexNumbers,edgeNumbers,i,j,V1,V2,Distance,n=1,v1,v2,kn;

struct V *p,*q,*temp;

printf("请输入您所要进行的测试次数:");

scanf("%d",&times);

while(times--)

{

printf("\n第%d组数据输入.\n",n++);

printf("请输入顶点数:");

scanf("%d",&vertexNumbers); //要保证vertexNumbers <= PointNum

for( i = 0 ; i < vertexNumbers ; i ++ )

{

Vertex[i].vertex = i;//

Vertex[i].distance = 0;

Vertex[i].sign = 0;

Vertex[i].next = NULL;

}

printf("请输入边数:");

scanf("%d",&edgeNumbers); //要保证vertexNumbers <= PointNum

for( i = 0 ; i < edgeNumbers ; i ++ )

{

printf("请输入数据:");

scanf("%d%d%d",&V1,&V2,&Distance);

p = &Vertex[V1];q = Vertex[V1].next;

while( q != NULL ){

p = q;

q = q->next;

}//出来的时候q指向Vertex[V1]邻接表的结尾-NULL,

temp = (struct V *)malloc(sizeof(Vertex[0]));

p->next = temp; temp->next = NULL;//接上temp

temp->vertex = V2; temp->distance = Distance;temp->sign = 0; //给temp赋值

p = &Vertex[V2];q = Vertex[V2].next;

while( q != NULL ){

p = q;

q = q->next;

}

temp = (struct V *)malloc(sizeof(Vertex[0]));///temp的问题???????

p->next = temp; temp->next = NULL;//接上temp

temp->ve

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值