图的搜索。

用邻接表作为图的存储结构建立一个图,并对此图分别进行深度优先搜索和广度优先搜索遍历。

#include<stdio.h>

#include<stdlib.h>

#define MAX_VERTEM_NUM 10

#define INFINITY 32768

typedef enum{

        DG,DN,UDG,UDN

}graghKind;

//digraph  DG有向图

//directed network  DN有向网

//undirected graph  UDG无向图

//undirected network  UDN无向网

typedef char vertemData;

int visited[MAX_VERTEM_NUM] = {0};//访问数组

typedef struct {

        vertemData vert[MAX_VERTEM_NUM];                      //顶点向量

        int adj[MAX_VERTEM_NUM][MAX_VERTEM_NUM];       //邻接矩阵

        int vertNum,arcNum;                                                //图的顶点数和弧数

        graghKind gragh;                                                 //图的类型

}adjMatrix;

/*队列结构*/

typedef struct QNode

{

        vertemData data;

        struct QNode *next;

}QNode;

typedef struct

{

        QNode *front,*rear;  //队头队尾指针

}LinkQueue;

//求顶点位置

int locateVertem(adjMatrix *G,vertemData v){

        for(int j=0;j<G->vertNum;j++)

        {

                if(G->vert[j]==v)

                {

                        return j;

                }

        }

}

//创建无向图

int creatUDG(adjMatrix *G){

        int i,j,k,weight;

        vertemData v1,v2;

        printf("请输入图的顶点数和弧数:\n");

        scanf("%d %d",&G->vertNum,&G->arcNum);

        for(i=0;i<G->vertNum;i++)

                for(j=0;j<G->vertNum;j++)

                        G->adj[i][j] = 0;

                        printf("请输入图的顶点:\n");

        for(i=0;i<G->vertNum;i++)

        {

                getchar();

                scanf("%c",&G->vert[i]);

        }

        printf("请输入边\n");

        for(k=0;k<G->arcNum;k++){

                getchar();

                scanf("%c %c",&v1,&v2);

                i = locateVertem(G,v1);

                j = locateVertem(G,v2);

                G->adj[i][j] = 1;

                G->adj[j][i] = 1;

        }

        return 0;

}

//深度遍历无向图

void depth_first_traversal_UDG(adjMatrix *G,int *v,int n)

{

        int i;

        if(G==NULL) return;

        if(n<0||n>G->vertNum) return;

        v[n] = 1;

        if(n==0) printf("%c",G->vert[n]);

        else printf("->%c",G->vert[n]);

        for(i=0;i<G->vertNum;i++)

                if(G->adj[n][i]!=0&&v[i]!=1) depth_first_traversal_UDG(G,v,i);

}

/*创建空队列*/

int init_queue(LinkQueue *L)

{

        L->front=L->rear=(QNode*)malloc(sizeof(QNode));

        if(!L->front) return 0;

        L->front->next=NULL;

        return 0;

}

/*判断队列是否为空*/

int empty_queue(LinkQueue *L)

{

        if(L->front->next==NULL) return 1;

        else return 0;

}

/*入队列*/

int in_queue(LinkQueue *L,int n)

{

        QNode *t = (QNode*)malloc(sizeof(QNode));

        if(!t) exit(0);

        t->data = n;

        t->next = NULL;

        L->rear->next = t;

        L->rear = t;

        free(t);

        return 0;

}

/*出队列*/

int out_queue(LinkQueue *L)

{

        QNode *t;

        if(L->front==L->rear) return 0;

        t = L->front->next;

        L->front->next = t->next;

        if(t==L->rear) L->rear = L->front;

        return 1;

}

/*广度遍历*/

int BFS_traverse_UDN(adjMatrix *G)

{

        int i=0,j;

        LinkQueue *L = (LinkQueue*)malloc(sizeof(LinkQueue));

        init_queue(L);

        printf("\n广度遍历无向图:\n");

        visited[i] = 1;

        printf("%c",G->vert[i]);

        in_queue(L,i);

        do

        {

                out_queue(L);

                for(j=0;j<G->vertNum;j++)

                {

                        if(G->adj[i][j]!=0&&visited[j]!=1)

                        {

                                visited[j] = 1;

                                printf("->%c",G->vert[j]);

                                in_queue(L,j);

                        }

                }

                i++;

        }while(!empty_queue(L));

        free(L);

        return 0;

}

int main(){

        adjMatrix *G = (adjMatrix*)malloc(sizeof(adjMatrix));

        creatUDG(G);

        int visited[G->vertNum]={0};

        printf("深度优先遍历无向图:\n");

        depth_first_traversal_UDG(G,visited,0);

        BFS_traverse_UDN(G);

        return 0;

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/34671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI应用探讨】—小型神经网络应用场景

目录 1. 移动设备 2. 物联网设备 3. 无人驾驶 4. 可穿戴设备 5. 其他领域 1. 移动设备 a. 图像识别 用例&#xff1a;在智能手机和平板电脑上运行的实时图像识别应用&#xff0c;如人脸识别、物体识别等。优势&#xff1a;小型神经网络能够在这些设备上快速运行&#xff…

Visual Studio Code 配置 java/maven 环境(Windows版)

在Windows版Visual Studio Code&#xff08;VS Code&#xff09;中配置Java和Maven环境&#xff0c;可以按照以下步骤进行&#xff1a; 1. 安装JDK 确保已经安装了JDK 8或更高版本。建议访问Oracle官网或OpenJDK官网下载相应版本的JDK。安装JDK后&#xff0c;配置系统环境变量…

OpenFeign 的请求处理流程

流程 1. 定义 Feign 客户端接口 首先&#xff0c;开发者需要定义一个 Feign 客户端接口&#xff0c;并使用 FeignClient 注解进行配置。例如&#xff1a; FeignClient(name "aService", url "http://localhost:8080") public interface ServiceProvid…

Python | Leetcode Python题解之第169题多数元素

题目&#xff1a; 题解&#xff1a; class Solution:def majorityElement(self, nums: List[int]) -> int:count 0candidate Nonefor num in nums:if count 0:candidate numcount (1 if num candidate else -1)return candidate

linux下编译安装python3

目录 一、注意事项 二、安装前依赖安装 三、下载python3 四、编译安装 五、查看是否安装成功 一、注意事项 linux下一般会自带python2&#xff0c;很多程序会依赖python2,所以要在python2基础上安装python3 二、安装前依赖安装 yum -y install zlib* yum install libffi-d…

Jotai-灵活的、细粒度的 React 状态管理库

一、Jotai是什么&#xff1f; Jotai 是一个用于 React 的轻量级状态管理库&#xff0c;名字来源于日语中的 "状態" (Jōtai)&#xff0c;意思是“状态”。它的设计目标是提供一种简单、灵活且强大的方式来管理 React 应用中的状态&#xff0c;特别适合处理复杂的状态…

【漏洞复现】用友 U9 PatchFile.asmx 任意文件上传漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

幂等的实现方案

幂等在开发中的概念 对于同一个系统&#xff0c;在同样条件下&#xff0c;一次请求和重复多次请求对资源的影响是一致的&#xff0c;就称该操作为幂等的。 常见的幂等的例子 银行系统中&#xff0c;一笔转账应当只扣一次钱。 商城系统中&#xff0c;一个订单只能提交一次&a…

PostgreSQL逻辑备份-pg_dumpall

pg_dumpall 用于将所有数据库转储到一个文本文件中。该文本文件包含可用作恢复数据 库的 SQL 命令。它通过为集群中的每个数据库调用 pg_dump 来做到这一点。 pg_dumpall 还转储所有数据库共有的全局对象&#xff0c;即数据库角色和表空间&#xff08;pg_dump 不 保存这些对…

LeetCode刷题(739/496/503)/华为od转盘寿司-单调栈

739.每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输…

IDEA引入本地jar包的两种方法(idea程序引入和maven)_idea 引入jar-CSDN博客

IDEA引入本地jar包的两种方法&#xff08;idea程序引入和maven&#xff09;_idea 引入jar-CSDN博客

互联网应用主流框架整合之Spring Boot开发

Spring Boot数据库开发 通常SpringBoot数据库开发&#xff0c;会引入spring-boot-starter-jdbc&#xff0c;而如果引入了spring-boot-starter-jdbc&#xff0c;但没有可用的数据源或者没有配置&#xff0c;那么在运行Spring Boot时会出现异常&#xff0c;因为spring-boot-star…

微积分-导数2(导数函数)

在前面的部分中&#xff0c;我们考虑了函数 f f f在固定点 a a a处的导数&#xff1a; f ′ ( a ) lim ⁡ h → 0 f ( a h ) − f ( a ) h \begin{equation}f(a) \lim_{h \to 0} \frac{f(ah) - f(a)}{h}\end{equation} f′(a)h→0lim​hf(ah)−f(a)​​​ 如果我们将等式中…

Activity中Window与View的关系

本文主要记录在Activity中View与Window相互作用关系&#xff0c;以及如何管理Window的展示、删除和更新。 创建Window ActivityThread收到launchActivity消息后&#xff0c;会调用performLaunchActivity方法开始创建Activity相关流程 private Activity performLaunchActivit…

服务器“雪崩”的常见原因和解决方法 (C++)

在C服务器编程中&#xff0c;"雪崩"现象指的是服务器在高并发请求的情况下&#xff0c;由于资源&#xff08;如线程、文件描述符、内存等&#xff09;耗尽或锁争用等问题&#xff0c;导致服务器性能急剧下降&#xff0c;甚至完全失去响应的情况。这种现象会连带影响其…

Redis持久化(RDB、AOF)详解

Redis持久化详解 一、Redis为什么需要持久化&#xff1f; Redis 是一个基于内存的数据库&#xff0c;拥有极高的读写性能&#xff0c;但是内存中的数据在断电或服务器重启时会全部丢失&#xff0c;因此需要一种持久化机制来将数据保存到硬盘上&#xff0c;以便在需要时进行恢复…

华为数通——STP-RSTP-MSTP生成树

STP 为了提高网络可靠性&#xff0c;交换机之间常常会进行设备冗余&#xff08;备份&#xff09;&#xff0c;但这样会给交换网络带来环路风险&#xff0c;导致广播风暴以及MAC地址表不稳定等问题。 STP&#xff1a;生成树协议的作用就是为了解决避免二层环路&#xff0c;解决…

STM32 DAC模块的应用(FW_F1_V1.8.5)

目录 概述 1 STM32Cube配置项目 1.1 软件版本信息 1.2 配置DAC模块参数 1.3 GENERATE Project 2 DAC库函数介绍 2.1 初始化函数&#xff1a;HAL_DAC_Init 2.2 启动DAC数据转换&#xff1a;HAL_DAC_Start 2.3 停止DAC数据转换&#xff1a;HAL_DAC_Stop 2.4 设置通道数…

CentOS停止维护,如何应对?

一、事件背景 2020年12月08日&#xff0c;CentOS官方宣布了停止维护CentOS Linux的计划&#xff0c;并推出了CentOS Stream项目。 更多信息&#xff0c;请参见CentOS官方公告。 版本变化说明CentOS 9不再支持新的软件和补丁更新CentOS 82021年12月31日停止维护服务CentOS 720…

小程序中data-xx是用方式

data-sts"3" 是微信小程序中的一种数据绑定语法&#xff0c;用于在 WXML&#xff08;小程序模板&#xff09;中将自定义的数据绑定到页面元素上。让我详细解释一下&#xff1a; data-xx 的作用&#xff1a; data-xx 允许你在页面元素上自定义属性&#xff0c;以便在事…