hdu 2066 一个人的旅行

本文分享了一次使用Dijkstra算法解决最短路径问题的经历。作者最初尝试使用Floyd算法但遇到超时问题,转而采用Dijkstra算法仍未能通过测试。最终,在阅读他人代码后发现问题所在并成功解决问题。
#include<stdio.h>
int inf = 0x7fffffff;
int map[1024][1024],des[1024],dis[1024],s,max,t,d,a[1024],b[1024];
int Dijkstra(  )
{
    ++max;
    for( int i = 1; i <= d; ++i )
         map[b[i]][max] = map[max][b[i]] = 0;
    dis[0] = 0;
    for( int i = 0; i <= max; ++i )
    {
         int min = inf,pos = -1,t;
         for( int j = 0; j <= max; ++j )//寻找当前的最短路
         {
              if( !des[j] )
                  if( dis[j] != inf )
                      if( dis[j] < min )
                      {
                          min = dis[j];
                          pos = j;
                      }
          }
          des[pos] = 1;
          for( int j = 0; j <= max; ++j )//更新于当前最短路相连的节点
          {
               if( !des[j] )
                   if( map[pos][j] != inf )
                       if( ( t = dis[pos] + map[pos][j] ) < dis[j] )
                           {
                               dis[j] = t;
                               }
           }
     }
     int min = inf;
     for( int i = 1; i <= d; ++i )
          min = min < dis[b[i]] ? min :dis[b[i]]; 
     return min;
}
int main( )
{
    while( scanf( "%d%d%d",&t,&s,&d ) != EOF )
    {
           for( int i = 0; i <= 1010; ++i )
           {
                for( int j = 0; j <= 1010; ++j )
                     map[i][j] = inf;
                des[i] = 0;
                dis[i] = inf;
            }
           for( int i = 1; i <= t; ++i )
           {
                int x,y,v;
                scanf( "%d%d%d",&x,&y,&v );
                if( v < map[x][y] )//一直wa的所在地
                    map[x][y] = map[y][x] = v;
                y = y > x ? y: x;
                max = max > y ?max: y;
            }
            for( int i = 1; i <= s; ++i )
            {
                 scanf( "%d",&a[i] );
                 map[0][a[i]] = map[a[i]][0] = 0;
                 }
            for( int j = 1; j <= d; ++j )
            {
                 scanf( "%d",&b[j] );
                 }
            printf( "%d\n",Dijkstra() );
           }
    return 0;
}
      
这题我开始偷懒,用floyd做果断超时,后来用Dijkstra做仍然wa,最后看了旭的代码后发现少了一个判断语句,代码中有提示

转载于:https://www.cnblogs.com/Lvsi/archive/2011/03/07/1973376.html

在当前电子工程与嵌入式系统设计中,STM32系列微处理器因其卓越的性能、稳定的运行特性以及多样的功能支持而被广泛采用。本文旨在分析以STM32为核心的单通道模数转换系统,其主要功能为获取单一传感器信号,并在屏幕上呈现结果,从而实现对周围光照水平的动态监控。该系统依托杨涛一号开发平台构建,该平台集成了STM32微控制器模块。 在项目启动前,需先掌握光电传感器的基本运作机制。该类器件基于光电效应,其阻值随入射光强变化而变化。光照增强时,电阻值下降;光照减弱时,电阻值上升。这种响应特性使其成为光线检测中的常见组件。 STM32芯片内部集成了ADC模块,可将连续的模拟信号转换为数字信号,便于后续处理。单通道ADC操作意味着仅对单一输入信号进行采样。在本系统中,该通道连接至光电传感器。当环境光强发生变化时,ADC输出的数值也随之变化,从而反映出当前的光照状况。 数据采集完成后,需将其呈现给用户。OLED显示屏在此过程中发挥关键作用。该类型显示屏采用自发光技术,无需额外光源,具备高对比度、宽视角以及低能耗等优点。在本项目中,OLED用于即时展示光电传感器的采集结果,即当前的光强数据。 杨涛一号开发板提供了丰富的接口资源,支持多种外设连接,有助于系统原型的搭建与验证。在本系统中,STM32微控制器分别与光电传感器和OLED屏幕相连,形成一个完整的数据采集与显示系统。 开发流程主要包括以下步骤:首先,配置STM32的ADC模块,调整采样频率与精度,以确保数据的准确性与实时性。接着,将光电传感器接入ADC输入端口,并通过适当接口连接OLED屏幕。在软件实现方面,需编写控制程序,定时读取传感器数据,并将其转换为可显示的格式。通过调用显示驱动代码,将处理后的数据呈现在OLED屏幕上。 编程环境通常为Keil uVision或STM32CubeIDE,开发语言多为C或C++。STM32官方库以C语言为主,便于开发者进行功能调用。程序编写完成后,需通过调试工具将代码写入开发板,随后进行功能验证,以确保系统运行的稳定性与测量的准确性。 本项目涵盖了硬件连接、软件编程、信号处理等多个技术层面。通过实现该系统,开发者可深入理解STM32微控制器的运行机制,掌握ADC与OLED显示技术的应用,同时提升系统集成与调试能力。此外,系统还可扩展其他功能,如集成无线通信模块,实现远程数据传输与监控。 整体而言,该项目融合了硬件设计与软件实现,兼具理论研究与实际应用价值。对于学习STM32在环境监测领域的应用具有较强的参考意义,同时也为掌握单通道ADC数据采集与显示技术提供了实践基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值