这段代码所用到的子函数的功能以及函数间的调用关系
时间: 2024-04-24 15:22:22 浏览: 16
这段代码主要使用了两个子函数:Dijkstra 和 Traceback。其中,Dijkstra 函数用于计算从源点到其它顶点的最短距离和路径,Traceback 函数用于输出最短路径。
Dijkstra 函数接受四个参数:n、v、dist 和 prev,分别表示顶点个数、源点、从源点到各顶点的最短距离和最短路径上的前一个顶点。函数中首先对 dist 和 prev 数组进行了初始化,然后采用贪心的策略,逐步将顶点加入到最短路径集合中,并更新其他顶点到源点的最短距离和前驱顶点。最后,函数返回计算结果。
Traceback 函数接受三个参数:v、i 和 prev,分别表示源点、终点和每个顶点在最短路径上的前驱顶点。函数采用递归的方式,从终点开始回溯,输出最短路径。
主函数中先生成带权有向图的邻接矩阵 c,然后要求用户输入源点 v。接着调用 Dijkstra 函数计算从源点到各顶点的最短距离和路径,最后根据计算结果输出路径和距离。
相关问题
stm32开发板电子时钟代码
好的,电子时钟是一种基于STM32开发板的常见项目。实现一个简单的电子时钟需要用到RTC模块和LCD屏幕。下面是一份基于STM32F103C8T6开发板的电子时钟代码:
```c
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rtc.h"
#include "stm32f10x_pwr.h"
#include "stm32f10x_bkp.h"
#include "lcd1602.h"
void RTC_Configuration(void);
void Time_Show(void);
int main(void)
{
LCD1602_Init(); // 初始化LCD
RTC_Configuration(); // 配置RTC
Time_Show(); // 显示时间
while(1);
return 0;
}
void RTC_Configuration(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); // 使能PWR和BKP时钟
PWR_BackupAccessCmd(ENABLE); // 允许访问BKP区域
if(RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET) // 判断是不是第一次启动
{
BKP_DeInit(); // 复位BKP区域
RCC_LSEConfig(RCC_LSE_ON); // 使能LSE
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); // 等待LSE稳定
RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); // 设置RTC时钟源为LSE
RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟
RTC_WaitForSynchro(); // 等待RTC寄存器同步
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
RTC_SetPrescaler(32767); // 设置RTC分频器,使得RTC时钟为1Hz
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
BKP_SetRTCCalibrationValue(0); // 设置RTC校准值为0
}
else
{
RCC_RTCCLKCmd(ENABLE); // 使能RTC时钟
RTC_WaitForSynchro(); // 等待RTC寄存器同步
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
}
RTC_ITConfig(RTC_IT_SEC, ENABLE); // 使能秒中断
RTC_WaitForLastTask(); // 等待RTC最后一次写入操作完成
}
void Time_Show(void)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
uint8_t str[16];
while(1)
{
RTC_GetTime(RTC_Format_BIN, &RTC_TimeStruct); // 获取当前时间
RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct); // 获取当前日期
sprintf((char*)str, "%04d-%02d-%02d", 2000 + RTC_DateStruct.RTC_Year, RTC_DateStruct.RTC_Month, RTC_DateStruct.RTC_Date);
LCD1602_ShowString(0, 0, str); // 显示日期
sprintf((char*)str, "%02d:%02d:%02d", RTC_TimeStruct.RTC_Hours, RTC_TimeStruct.RTC_Minutes, RTC_TimeStruct.RTC_Seconds);
LCD1602_ShowString(0, 1, str); // 显示时间
delay_ms(1000); // 延时1秒
}
}
```
在这段代码中,我们首先调用`LCD1602_Init()`函数初始化LCD屏幕,然后调用`RTC_Configuration()`函数配置RTC模块,最后调用`Time_Show()`函数循环显示当前时间。
在`RTC_Configuration()`函数中,我们首先使能PWR和BKP时钟,然后判断是否是第一次启动。如果是第一次启动,则复位BKP区域、使能LSE、等待LSE稳定、设置RTC时钟源为LSE、设置RTC分频器为32767(使得RTC时钟为1Hz)、设置RTC校准值为0;如果不是第一次启动,则直接使能RTC时钟。
在`Time_Show()`函数中,我们首先定义了一个`str`数组用来存储日期和时间的字符串表示。然后进入一个无限循环,在每次循环中,我们调用`RTC_GetTime()`函数获取当前时间和`RTC_GetDate()`函数获取当前日期,并将它们转化成字符串格式存入`str`数组中。最后调用`LCD1602_ShowString()`函数在LCD屏幕上显示日期和时间,并延时1秒。
以上是一个简单的基于STM32开发板的电子时钟代码示例,你可以根据需要进行修改和完善。如果你有任何问题或疑问,请随时提出。下面是三个相关问题:
程序功能为:输入IP地址,判断IPV4的分类结果。当输入0时结束程序。 编程思想为:将输入字符串以“.”分隔为四组,判断合理性后调用函数ipclass返回地址分类结果。 说明:IPV4地址为四组十进制正整数,以点分隔,四组数字均不能大于255,也不能含非数字符号。IPV4的分类规则简化描述如下:首段数字为1~126是A类地址;128~191是B类地址;192~223是C类地址,除此之外归为其它类地址。
这个程序需要用到字符串分割和类型转换,可以按照以下思路实现:
1. 读取用户输入的IP地址字符串,以"."为分隔符,将其分割成四个子字符串;
2. 将每个子字符串转换成整数,判断是否在0~255之间,如果不是,则输入的IP地址不合法;
3. 判断IP地址的分类,根据首段数字的范围进行判断;
4. 输出IP地址的分类结果;
5. 如果用户输入的是0,则结束程序。
下面是一个示例代码:
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)