2.10学习总结

Dijkstra算法求取最短路径

注:迪杰斯特拉算法并不能直接生成最短路径,但是算法将最短路径信息保存在dist数组和path数组中。

#include <stdio.h>
#include <stdlib.h>
#define VertexMax 20 //最大顶点数为20
#define MaxInt 32767 //表示最大整数,表示 ∞ typedef char VertexType; //每个顶点数据类型为字符型 typedef struct
{VertexType Vertex[VertexMax];//存放顶点元素的一维数组 int AdjMatrix[VertexMax][VertexMax];//邻接矩阵二维数组 int vexnum,arcnum;//图的顶点数和边数  
}MGraph;int LocateVex(MGraph *G,VertexType v)//查找元素v在一维数组 Vertex[] 中的下标,并返回下标 
{int i;for(i=0;i<G->vexnum;i++){if(v==G->Vertex[i]){return i; } } printf("No Such Vertex!\n");return -1;
}void CreateDN(MGraph *G) 
{int i,j;//1.输入顶点数和边数 printf("输入顶点个数和边数:\n");printf("顶点数 n="); scanf("%d",&G->vexnum);printf("边  数 e="); scanf("%d",&G->arcnum);//2.输入顶点元素 printf("输入顶点元素(无需空格隔开):");scanf("%s",G->Vertex);printf("\n");//3.矩阵初始化for(i=0;i<G->vexnum;i++) for(j=0;j<G->vexnum;j++){G->AdjMatrix[i][j]=MaxInt;}//4.构建邻接矩阵int n,m;VertexType v1,v2;int w;//v1->v2的权值 printf("输入路径及路径长度:\n");for(i=0;i<G->arcnum;i++){printf("输入第%d条路径信息:",i+1);scanf(" %c%c,%d",&v1,&v2,&w);n=LocateVex(G,v1); //获取v1所对应的在Vertex数组中的坐标 m=LocateVex(G,v2); //获取v2所对应的在Vertex数组中的坐标if(n==-1||m==-1){printf("NO This Vertex!\n");return;} G->AdjMatrix[n][m]=w;}
}void print(MGraph G)
{int i,j;printf("\n-----------------------------------------------");printf("\n 邻接矩阵:\n\n"); printf("\t ");for(i=0;i<G.vexnum;i++)printf("\t%c",G.Vertex[i]);printf("\n");for(i=0;i<G.vexnum;i++){printf("\t%c",G.Vertex[i]);for(j=0;j<G.vexnum;j++){if(G.AdjMatrix[i][j]==MaxInt)printf("\t∞");else printf("\t%d",G.AdjMatrix[i][j]);}printf("\n");}}void displayPath(int dist[],int path[],MGraph *G,VertexType start)
{int i,k,j=0;int temp[VertexMax];//临时数组 VertexType target;//目标地点 int loc=0; for(i=0;i<VertexMax;i++)temp[i]=-1;printf("\n-----------------------------------------------\n");printf("结果展示:\n");printf("\n\n");//打印dist数组 printf("\tdist[i]:\n\t");for(i=0;i<G->vexnum;i++)printf("\t%d",i);printf("\n\t"); for(i=0;i<G->vexnum;i++){printf("\t%d",dist[i]);}printf("\n");printf("\n\n");//打印path数组 printf("\n\tpath[i]:\n\t");for(i=0;i<G->vexnum;i++)printf("\t%d",i);printf("\n\t"); for(i=0;i<G->vexnum;i++){printf("\t%d",path[i]);}printf("\n\n"); //最短路径 printf("最短路径:\n\n"); for(i=0;i<G->vexnum;i++){loc=i;j=0;while(loc!=-1){temp[j]=loc;loc=path[loc];j++;}if(j-1==0&&G->Vertex[temp[j-1]]==start){printf("\t");printf("%c->%c:%c为起始点!",start,G->Vertex[i],G->Vertex[temp[j-1]]);}else if(j-1==0&&G->Vertex[temp[j-1]]!=start){printf("\t");printf("%c->%c:%c不可达%c",start,G->Vertex[i],start,G->Vertex[temp[j-1]]);}else{printf("\t");printf("%c->%c:",start,G->Vertex[i]);for(j=j-1;j>=0;j--){printf("%c ",G->Vertex[temp[j]]);}printf("(总路径长度:%d)",dist[i]);}for(k=0;k<20;k++)temp[k]=-1;printf("\n\n"); }
}int FindMinDist(int dist[],int s[],int vexnum) 
{int i;int loc;int min=MaxInt+1;for(i=0;i<vexnum;i++){if(s[i]==0)//只对s[i]=0的顶点进行查找 {if(dist[i]<min){min=dist[i];loc=i;}}}return loc;//返回dist中最小元素的下标 
}void ShortestPath_Dijkstra(MGraph *G,VertexType start)
{int i,j,num;int loc;int min;int dist[VertexMax];//最短路径长度数组 int path[VertexMax];//最短路径数组 int s[VertexMax];//代表集合S(1代表该顶点已处理,属于集合S;0代表该顶点未处理,不属于集合S,属于集合V-S) //1.初始化dist和path数组 loc=LocateVex(G,start);//获取源点的下标位置 for(i=0;i<G->vexnum;i++){dist[i]=G->AdjMatrix[loc][i];if(dist[i]!=MaxInt){path[i]=loc;}else{path[i]=-1;}	  } //2.初始化S数组(s数组:代表集合S,1代表该元素属于集合S(已处理的顶点),0该元素不属于集合S(未处理的顶点)) for(i=0;i<G->vexnum;i++){s[i]=0;} s[loc]=1;//代表起始点(源点)以处理完毕 num=1;//3.while(num<G->vexnum){min=FindMinDist(dist,s,G->vexnum);//在dist数组中查找其对应s[i]=0,即未处理的最小值元素 s[min]=1;//将找到的最短边所对应的的顶点加入集合Sfor(i=0;i<G->vexnum;i++)//加入新的顶点后,更新dist和path数组 {if((s[i]==0)&&(dist[i]>dist[min]+G->AdjMatrix[min][i]))//{dist[i]=dist[min]+G->AdjMatrix[min][i];path[i]=min;//min->i}}num++;	} displayPath(dist,path,G,start);//展示dist数组、path数组及最短路径 } int main() 
{MGraph G;VertexType start;CreateDN(&G);print(G); printf("输入起始点:"); scanf(" %c",&start);printf("\n");ShortestPath_Dijkstra(&G,start);return 0;
}

,洛谷p2021feabdc玩扑克

(也可以尝试链表解决

#include<stdio.h>
int a[1000], n, s;
int main() {scanf("%d", &n);for (int i = 1;i <= n;i++) {for (int j = 1;j <= 2;j++) {s++;if (s > n)s = 1;if (a[s] != 0)j--;}a[s] = i;}for (int i = 1;i <= n;i++) {printf("%d ", a[i]);}return 0;
}

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

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

相关文章

【漫话机器学习系列】087.常见的神经网络最优化算法(Common Optimizers Of Neural Nets)

常见的神经网络优化算法 1. 引言 在深度学习中&#xff0c;优化算法&#xff08;Optimizers&#xff09;用于更新神经网络的权重&#xff0c;以最小化损失函数&#xff08;Loss Function&#xff09;。一个高效的优化算法可以加速训练过程&#xff0c;并提高模型的性能和稳定…

深度学习 视频推荐

以下为你呈现一个基于深度学习实现视频推荐的简化代码示例。这里我们使用的是协同过滤思想结合神经网络的方式,借助 TensorFlow 和 Keras 库来构建模型。在这个示例中,假设已有用户对视频的评分数据,目标是预测用户对未评分视频的评分,进而为用户推荐可能感兴趣的视频。 1…

蓝桥杯算法日记|贪心、双指针

3412 545 2928 2128 贪心学习总结&#xff1a; 1、一般经常用到sort&#xff08;a&#xff0c;an&#xff09;&#xff1b;【a[n]】排序&#xff0c;可以给整数排&#xff0c;也可以给字符串按照字典序排序 2、每次选最优 双指针 有序数组、字符串、二分查找、数字之和、反转字…

傅里叶公式推导(一)

文章目录 三角函数系正交证明图观法数学证明法计算当 n不等于m当 n等于m&#xff08;重点&#xff09; 其它同理 首先要了解的一点基础知识&#xff1a; 三角函数系 { sin ⁡ 0 , cos ⁡ 0 , sin ⁡ x , cos ⁡ x , sin ⁡ 2 x , cos ⁡ 2 x , … , sin ⁡ n x , cos ⁡ n x ,…

数据结构-find()-判断字符串s1中是否包含字符串s2

find()库函数 #include <iostream> using namespace std;bool check(string s1,string s2){int n s1.size();int m s2.size();if(n0||m0 || n<m){return false;}if(s1.find(s2) ! string::npos){return true;}else{return false;} }int main () {string a "…

1. 构建grafana(版本V11.5.1)

一、grafana官网 https://grafana.com/ 二、grafana下载位置 进入官网后点击downloads&#xff08;根据自己的需求下载&#xff09; 三、grafana安装&#xff08;点击下载后其实官网都写了怎么安装&#xff09; 注&#xff1a;我用的Centos&#xff0c;就简略的写下我的操作步…

macOS 上部署 RAGFlow

在 macOS 上从源码部署 RAGFlow-0.14.1&#xff1a;详细指南 一、引言 RAGFlow 作为一款强大的工具&#xff0c;在人工智能领域应用广泛。本文将详细介绍如何在 macOS 系统上从源码部署 RAGFlow 0.14.1 版本&#xff0c;无论是开发人员进行项目实践&#xff0c;还是技术爱好者…

stm32小白成长为高手的学习步骤和方法

我们假定大家已经对STM32的书籍或者文档有一定的理解。如不理解&#xff0c;请立即阅读STM32的文档&#xff0c;以获取最基本的知识点。STM32单片机自学教程 这篇博文也是一篇不错的入门教程&#xff0c;初学者可以看看&#xff0c;讲的真心不错。 英文好的同学&#xf…

计算机网络面经

文章目录 基础HTTPHTTP报文结构 (注意)RPC和http的区别TCPTCP报文结构(注意)IP基础 HTTP HTTP报文结构 (注意) 请求行:请求方法get/post,url,http版本 请求头:用户标识,请求体长度,类型,cookie 请求体:内容 状态行:状态码,状态消息、(http版本) 响应头:内…

快速集成DeepSeek到项目

DeepSeek API-KEY 获取 登录DeekSeek 官网&#xff0c;进入API 开放平台 2. 创建API-KEY 复制API-KEY进行保存&#xff0c;后期API调用使用 项目中集成DeepSeek 这里只展示部分核心代码&#xff0c;具体请查看源码orange-ai-deepseek-biz-starter Slf4j AllArgsConstructo…

PHP函数介绍—get_headers(): 获取URL的响应头信息

概述&#xff1a;在PHP开发中&#xff0c;我们经常需要获取网页或远程资源的响应头信息。PHP函数get_headers()能够方便地获取目标URL的响应头信息&#xff0c;并以数组形式返回。本文将介绍get_headers()函数的用法&#xff0c;以及提供一些相关的代码示例。 get_headers()函…

保姆级教程Docker部署Zookeeper模式的Kafka镜像

目录 一、安装Docker及可视化工具 二、Docker部署Zookeeper 三、单节点部署 1、创建挂载目录 2、命令运行容器 3、Compose运行容器 4、查看运行状态 5、验证功能 四、部署可视化工具 1、创建挂载目录 2、Compose运行容器 3、查看运行状态 一、安装Docker及可视化工…

Docker容器访问外网:启动时的网络参数配置指南

在启动Docker镜像时,可以通过设置网络参数来确保容器能够访问外网。以下是几种常见的方法: 1. 使用默认的bridge网络 Docker的默认网络模式是bridge,它会创建一个虚拟网桥,将容器连接到宿主机的网络上。在大多数情况下,使用默认的bridge网络配置即可使容器访问外网。 启动…

Java 使用腾讯翻译 API 实现含 HTML 标签文本精准翻译工具

一、翻译标签文本工具 package org.springblade.common.utils;import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;public class TencentTranslationForHTML {public static void main(String[] args) {Stri…

白话文实战Nacos(保姆级教程)

前言 上一篇博客 我们创建好了微服务项目,本篇博客来体验一下Nacos作为注册中心和配置中心的功能。 注册中心 如果我们启动了一个Nacos注册中心,那么微服务比如订单服务,启动后就可以连上注册中心把自己注册上去,这过程就是服务注册。每个微服务,比如商品服务都应该注册…

docker 安装 Prometheus、Node Exporter 和 Grafana

Docker Compose 配置文件 docker-compose.yml services:prometheus:image: prom/prometheus:latestcontainer_name: prometheusvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件 - prometheus_data:/prometheus # 持久化数据存储 command:- --…

RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析

1️⃣ 引言 在现代分布式系统架构中&#xff0c;&#x1f4e9;消息队列&#xff08;MQ&#xff09;是不可或缺的组件。它在系统&#x1f517;解耦、&#x1f4c9;流量削峰、⏳异步处理等方面发挥着重要作用。目前&#xff0c;主流的消息队列系统包括 &#x1f680;RocketMQ、&…

C语言基础08:运算符+流程控制总结

运算符 算术运算符 结果&#xff1a;数值 、-、*、\、%、&#xff08;正&#xff09;、-&#xff08;负&#xff09;、、-- i和i 相同点&#xff1a;i自身都会增1 不同点&#xff1a;它们运算的最终结果是不同的。i&#xff1a;先使用&#xff0c;后计算&#xff1b;i&am…

Node.js开发属于自己的npm包(发布到npm官网)

在 Node.js 中开发并发布自己的 npm 包是一个非常好的练习&#xff0c;可以帮助我们更好地理解模块化编程和包管理工具&#xff0c;本篇文章主要阐述如何使用nodejs开发一个属于自己的npm包&#xff0c;并且将其发布在npm官网。在开始之前确保已经安装了 Node.js 和 npm。可以在…

如何在RTACAR中配置IP多播(IP Multicast)

一、什么是IP多播 IP多播&#xff08;IP Multicast&#xff09;是一种允许数据包从单一源地址发送到多个目标地址的技术&#xff0c;是一种高效的数据传输方式。 多播地址是专门用于多播通信的IP地址&#xff0c;范围从 224.0.0.0到239.255.255.255 与单播IP地址不同&#x…