USACO section 3.3 Riding the Fences(欧拉通路的遍历,dfs)

NXP实战笔记(十):S32K3xx基于RTD-SDK在S32DS上配置CAN通信 S32K3xx的FlexCan与之前的S32K1xx很相似,Can的中断掩码寄存器(IMASK3)与中断标志位寄存器(IFLAG3)依赖于邮箱数。FlexCan配置实例如下FlexCan的整体图示如下-请求RAM访问以接收核发送消息帧-验证接收到的消息-检测CANFD的消息-管理接收和传输的消息缓冲区-负责CAN或CAN FD消息格式的仲裁与ID匹配算法-控制从内部总线访问接口-接口到内部时钟,地址和数据总线,中断,DMA请求。-消息缓冲区存储在专用的嵌入式RAM中。 阅读详情
Riding the Fences

Farmer John owns a large number of fences that must be repaired annually. He traverses the fences by riding a horse along each and every one of them (and nowhere else) and fixing the broken parts.

Farmer John is as lazy as the next farmer and hates to ride the same fence twice. Your program must read in a description of a network of fences and tell Farmer John a path to traverse each fence length exactly once, if possible. Farmer J can, if he wishes, start and finish at any fence intersection.

Every fence connects two fence intersections, which are numbered inclusively from 1 through 500 (though some farms have far fewer than 500 intersections). Any number of fences (>=1) can meet at a fence intersection. It is always possible to ride from any fence to any other fence (i.e., all fences are "connected").

Your program must output the path of intersections that, if interpreted as a base 500 number, would have the smallest magnitude.

There will always be at least one solution for each set of input data supplied to your program for testing.

PROGRAM NAME: fence

INPUT FORMAT

Line 1:The number of fences, F (1 <= F <= 1024)
Line 2..F+1:A pair of integers (1 <= i,j <= 500) that tell which pair of intersections this fence connects.

SAMPLE INPUT (file fence.in)

9
1 2
2 3
3 4
4 2
4 5
2 5
5 6
5 7
4 6

OUTPUT FORMAT

The output consists of F+1 lines, each containing a single integer. Print the number of the starting intersection on the first line, the next intersection's number on the next line, and so on, until the final intersection on the last line. There might be many possible answers to any given input set, but only one is ordered correctly.

SAMPLE OUTPUT (file fence.out)

1
2
3
4
2
5
4
6
5
7

 

思路:遍历欧拉通路的方法是用深搜起始边开始的每一条边,当某个点的边都遍历完就用栈记录这个点,当深搜结束后,依次从栈取出的就是遍历过程的答案。

 

 

具体看代码:

/*
ID:nealgav1
LANG:C++
PROG:fence
*/
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
ifstream cin("fence.in");
ofstream cout("fence.out");
const int mm=520;
vector<int>edge[mm];///容器存边方便
int ans[1234567],pos;///模拟栈,存答案的
int vis[mm][mm];///判断边是否有被遍历过
void dfs(int u,int v)
{ vector<int>::iterator it;
  vis[u][v]--;vis[v][u]--;///遍历的边删去
  for(it=edge[v].begin();it!=edge[v].end();it++)
  { int z=*it;
   if(vis[v][z])///深搜下一条边
   {
    dfs(v,z);
    //cout<<"pos="<<pos<<endl;
   }
  }
  //vis[u][v]++;vis[v][u]++;
  ans[pos++]=u;///搜完记录答案
}
int main()
{
  int cas,u,v;
  cin>>cas;
  for(int i=0;i<503;i++)
  for(int j=0;j<503;j++)
  vis[i][j]=0;
  while(cas--)
  {
    cin>>u>>v;edge[u].push_back(v);edge[v].push_back(u);
    vis[u][v]++;vis[v][u]++;
  }
  int start=550;int flag=0;
  int end=505;
  ///从小到大排序
  for(int i=0;i<=500;i++)sort(edge[i].begin(),edge[i].end());
  ///找起点和终点
  for(int i=1;i<=500;i++)
  {
    if(edge[i].size()&&i<start)start=end=i;
    if(edge[i].size()&1)
    { if(!flag)
      start=i;
      else {end=i;break;}
      flag++;
    }
  }
  pos=0;
  dfs(start,edge[start].front());
  for(int i=pos-1;i>=0;i--)
  cout<<ans[i]<<"\n";
  ///最后一个点特殊处理输出
  cout<<end<<"\n";
  cin.close();cout.close();
}


 

 

Riding the Fences
Hal Burch

Assuming you pick the lowest index vertex connected to each node, the Eulerian Path algorithm actually determines the path requested, although in the reverse direction. You must start the path determination at the lowest legal vertex for this to work.

/* Prob #5: Riding the Fences */
#include <stdio.h>
#include <string.h>

#define MAXI 500
#define MAXF 1200
char conn[MAXI][MAXI];
int deg[MAXI];
int nconn;

int touched[MAXI];

int path[MAXF];
int plen;

/* Sanity check routine */
void fill(int loc)
 {
  int lv;

  touched[loc] = 1;
  for (lv = 0; lv < nconn; lv++)
    if (conn[loc][lv] && !touched[lv])
      fill(lv);
 }

/* Sanity check routine */
int is_connected(int st)
 {
  int lv;
  memset(touched, 0, sizeof(touched));
  fill(st);
  for (lv = 0; lv < nconn; lv++)
    if (deg[lv] && !touched[lv])
      return 0;
  return 1;
 }

/* this is exactly the Eulerian Path algorithm */
void find_path(int loc)
 {
  int lv;

  for (lv = 0; lv < nconn; lv++)
    if (conn[loc][lv])
     {
      /* delete edge */
      conn[loc][lv]--;
      conn[lv][loc]--;
      deg[lv]--;
      deg[loc]--;

      /* find path from new location */
      find_path(lv);
     }

  /* add this node to the `end' of the path */
  path[plen++] = loc;
 }

int main(int argc, char **argv)
 {
  FILE *fin, *fout;
  int nfen;
  int lv;
  int x, y;

  if (argc == 1) 
   {
    if ((fin = fopen("fence.in", "r")) == NULL)
     {
      perror ("fopen fin");
      exit(1);
     }
    if ((fout = fopen("fence.out", "w")) == NULL)
     {
      perror ("fopen fout");
      exit(1);
     }
   } else {
    if ((fin = fopen(argv[1], "r")) == NULL)
     {
      perror ("fopen fin filename");
      exit(1);
     }
    fout = stdout;
   }

  fscanf (fin, "%d", &nfen);
  for (lv = 0; lv < nfen; lv++)
   {
    fscanf (fin, "%d %d", &x, &y);
    x--; y--;
    conn[x][y]++;
    conn[y][x]++;
    deg[x]++;
    deg[y]++;
    if (x >= nconn) nconn = x+1;
    if (y >= nconn) nconn = y+1;
   }

  /* find first node of odd degree */
  for (lv = 0; lv < nconn; lv++)
    if (deg[lv] % 2 == 1) break;
  /* if no odd-degree node, find first node with non-zero degree */
  if (lv >= nconn)
    for (lv = 0; lv < nconn; lv++)
      if (deg[lv]) break;
#ifdef CHECKSANE
  if (!is_connected(lv)) /* input sanity check */
   {
    fprintf (stderr, "Not connected?!?\n");
    return 0;
   }
#endif

  /* find the eulerian path */
  find_path(lv); 

  /* the path is discovered in reverse order */
  for (lv = plen-1; lv >= 0; lv--)
    fprintf (fout, "%i\n", path[lv]+1);
  return 0;
 }

 

 

NXP S32k3 MCAL CAN &CANFD 配置 S32K3配置CAN&CANFD通信 阅读详情

相关推荐

S32K3系列---基于Mcal的CAN配置

CAN通信一直是一块很复杂的模块,博主也只能勉强了解其一二。这边做一个学习记录,供大家参考。

wj博客 2541

S32K3学习笔记---S32K3之CAN模块

本文是基于S32K324 RTD3.0做的一个简单调试,在两个核分别注册一路CAN,会分别介绍中断和轮询两种方式,一般而言BT用轮询,APP里面一般用中断。其次也是介绍一下CANFD和CAN,主要记录整个过程。

Abler_xaing的博客 1万+

S32K3_RTD1.0.0_MCAL4.4_FlexCAN_Example.7z

S32K3_MCAL_FlexCAN_Example_FIFO_DMA,S32K3_MCAL_FlexCAN_Example_Interrupt,S32K3_MCAL_FlexCAN_Example_Polling

S32K3如何实现CAN通信

S32K3是一款嵌入式处理器,它可以通过内置的CAN控制器实现CAN通信。在使用S32K3进行CAN通信时,你需要先在硬件上连接CAN总线,然后在软件上使用相应的API来配置CAN控制器并发送和接收数据。 你可以参考S32K3的文档和例程来了解如何使用S32K3的CAN控制器。文档和例程通常可以在芯片的生产商网站上找到。 ...

weixin_35750483的博客 1224

S32K CAN收发代码

S32K148 CAN代码例程,内容详细,调用sdk的接口函数实现can收发。can中断接收。S32K系列都可以。

从STM32转战STC32G?逐飞开源库帮你快速上手GPIO、PWM与ADC(避坑指南)

本文详细介绍了从STM32迁移到STC32G32K128的开发实践,重点解析了GPIO、PWM和ADC等基础外设的设计差异,并提供了基于逐飞开源库的高效应用方案。通过对比两种平台的开发工具和操作方式,帮助开发者快速上手STC32G,避免常见陷阱,提升开发效率。

weixin_30316097的博客 529

小猫爪:S32K3学习笔记02-S32K3之FlexCAN

S32K3学习笔记02-S32K3之FlexCAN的MCAL配置示例1 前言2 FlexCAN简介3 Classic CAN MCAL配置示例4 CAN FD MCAL配置示例 1 前言   我学习一下S32K3的CAN外设,CAN的使用场景还是非常多的,特别在汽车电子更是主流的通信网络,下面就基于S32K3的FlexCAN模块学习一下CAN的相关知识以及S32K3有关CAN的MCAL配置示例。 2 FlexCAN简介 3 Classic CAN MCAL配置示例 4 CAN FD MCAL配置示例 ..

Oushuwen的博客 3万+

接入穿山甲SDK时,Unity打Android包报错日志

SDK工程设置为Enable,项目工程设置为Disable。2、将unitypackage导入包名为:com.DefaultCompany.Myproject的另一个工程,打包报错。3、点击工程默认弹出Enable Android Auto-resolution 设置选项,点击Enable。1、新建一个空工程,设置包名为:com.ceshi.hewen,正常打包无报错,导出unitypackage。2、点击Reset to Defaults 重置参数,再点击ok关闭设置窗口。

不文不武的禾文 3583

【S32K3学习笔记】配置FlexCAN接收指定CANID

基于S32K344配置过滤器接收任意指定CANID

Wildboys的博客 4972

安装升级最新版本postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题

软件版本迭代更新真快,最近升级最新Postman版本时出现以下问题 我就简单纪录下解决办法: 备注:我用的是最新的postman工具包:Postman-win64-7.25.0-Setup.exe,目前是最新 0. 前提是已经到postman官网https://www.postman.com/downloads/下载好软件工具包 1.安装window7系统更新补丁KB2533623,请到微软公司官网https://support.microsoft.com/en-us/help/2...

董广明的博客 1万+

Ubuntu系统下STM32开发环境搭建:从零配置CubeMX、VSCode与OpenOCD调试实战

本文详细介绍了在Ubuntu系统下搭建STM32开发环境的完整流程,包括CubeMX、VSCode和OpenOCD的安装配置。通过实战教程指导开发者从基础环境准备到工程创建与调试,提供高效的嵌入式开发解决方案,并分享常见问题解决方法。

potato的博客 941

S32K3 MCAL CAN配置详解 基于EBtresos

S32K3 MCAL CAN配置详解 基于EBtresos

xhydsb的博客 3815

FLUKA软件在Ubuntu的安装指南(亲测有效)

FLUKA其强大的蒙特卡洛模拟能力使得用户能够模拟复杂的辐射相互作用过程

chencheng1127的博客 2886

关于NXP的S32K,K3系列关于CAN接收过滤的掩码设置

恩智浦芯片目前CAN这块干了两种项目,关于CAN接收这一块,上一个项目都是用MB0接收所有的CAN帧,不做物理过滤设置;接手第二种项目,是每一个MB(message buffer),对应一个掩码过滤,导致新增加的报文接收不到,先不说第一种项目会不会有丢帧(目前在手册中没有找到相关的描述,如果所有的最多32个MB都被不过滤的任意的报文占满,会不会出现RMB丢帧的情况,或者去覆盖最低优先级的MB)或硬件资源浪费(中断受各种报文的响应)的情况,第二种面临的问题就是需要把目前这个CAN接收的过滤区放...

weixin_39807914的博客 9057

开心消消乐

1)当点击一个1时,该1变被反转为0,同时相邻的上、下、左、右,以及左上、左下、右上、右下8个方向的1(如果存在1)均会自动反转为0;2)进一步地,一个位置上的1被反转为0时,与其相邻的8个方向的1(如果存在1)均会自动反转为0;上述样例中,四个角上的1均在中间的1的相邻8个方向上,因此只需要点击一次即可。给定一个N行M列的二维矩阵,矩阵中每个位置的数字取值为0或1。在上述4 * 4的矩阵中,只需要点击2次,即可将所有的1进行消除。接下来N行表示矩阵的初始值,每行均为M个数,取值范围[0,1]

面试高手的博客 2729

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

2025年09月中国电子学会青少年软件编程(Python)等级考试试卷(三级)答案 + 解析

伶俐角少儿编程 515

S32K3平台CAN 应用说明

当至少有一个帧可从旧版 FIFO 中读取时,将声明 IFLAG1[BUF5I](旧版 Rx FIFO 中可。当由于旧版 Rx FIFO 已满而丢失传入消息时,将声明 IFLAG1[BUF7I](旧版 Rx FIFO。取消息(作为消息缓冲区访问旧版 FIFO 的输出)和 RXFIR 寄存器,然后清除中断。版 FIFO 中有更多消息,清除中断的操作将使用下一条消息更新旧版 FIFO 的输出,并使用。当由于接收到新的旧消息时,Legacy Rx FIFO 中未读消息的数量从四个增加到五个,则。

qq_33553862的博客 1844

C#联合Halcon机器视觉框架源码

本软件参考EV开发,共用模块,基于WPF+Halcon,是非常不错的学习框架,需要什么功能可以自己添加,插件式开发非常方便。

Z's Palace 4827

P2731 [USACO3.3]骑马修栅栏 Riding the Fences(欧拉路板子)

题目背景 Farmer John 每年有很多栅栏要修理。他总是骑着马穿过每一个栅栏并修复它破损的地方。 题目描述 John 是一个与其他农民一样懒的人。他讨厌骑马,因此从来不两次经过一个栅栏。 John 的农场上一共有mm个栅栏,每一个栅栏连接两个顶点,顶点用11到500500标号(虽然有的农场并没有那么多个顶点)。一个顶点上至少连接11个栅栏,没有上限。两顶点间可能有多个栅栏。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。John 能从任何一个顶点(即两个栅栏...

m0_57006708的博客 361

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

NXP S32K3系列学习笔记——FlexCAN驱动开发

学习NXP S32K3系列芯片笔记,内容大多通过阅读官方RM手册与自我理解得出,小白笔记,如有错误请谅解。

littlepoint博客 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【S32K3学习笔记】FlexCAN

文章目录前言一、CAN是什么?二、CAN框架1.MBs结构2.工作流程3.常用API总结 前言 由于之前没有接触过CAN总线模块,对这一块的知识仍比较陌生,于是乎想简单梳理一下CAN总线的工作流程,加深理解。 一、CAN是什么? 参考:https://zhuanlan.zhihu.com/p/346696648 二、CAN框架 各模块功能如下: 协议引擎Protocol Engine (PE) PE用于管理CAN总线上的串行通讯: 请求RAM访问用于接收、发送消息帧;验证接收的消息; 运行错误处理; 探

weixin_44712171的博客 5391

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

S32K3 CAN模块EB配置实战:从信号沉默到数据蹦迪的保姆指南

它的主要功能是将CAN控制器生成的电信号转换为适合在CAN总线上传输的电平信号,同时也将从CAN总线上接收到的信号转换为CAN控制器可以理解的电信号。S32K314的CAN模块支持多通道通信,符合ISO 11898标准,能够处理高达1 Mbps的数据传输速率,具备硬件过滤器和错误检测机制,确保数据传输的可靠性,同时支持CAN FD,适用于汽车电子、工业自动化等领域。最近接触到汽车产品。可以看到,NXP的can叫做can_43,NXP的很多外设都是带数字的,这个不知道原因,知道的话可以在评论区进行讨论。

u014156384的博客 1888

P2731 [USACO3.3] 骑马修栅栏 Riding the Fences

John 的农场上一共有 m 个栅栏,每一个栅栏连接两个顶点,顶点用 11 到 500500 标号(虽然有的农场并没有那么多个顶点)。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。如果存在多组可行的解,按照如下方式进行输出:如果把输出的路径看成是一个 500500 进制的数,那么当存在多组解的情况下,输出 500500 进制表示法中最小的一个 (也就是输出第一位较小的,如果还有多组解,输出第二位较小的,以此类推)。共 (m+1) 行,每行一个整数,依次表示路径经过的顶点号。

m0_73786955的博客 942

S32K344之FlexCAN

前8字节(0x00-0x08)用于存储一些邮箱信息(FD帧之类的):表示了CAN规范(2.0版本B部分)中使用的扩展(29位标识符)和标准(11位标识符)帧。错误检测机制:CAN2.0A使用CRC(循环冗余校验)来检测错误,而CAN2.0B使用了更加复杂的错误检测和纠正机制,包括CRC、ACK(确认应答)和重传机制等,从而提高了数据传输的可靠性和稳定性。需要注意的是,CAN 位速率的每一个(时间段)选项的配置范围,根据使用情况而定。所以,我的理解:FLEXCAN_n_PE_CLK 的n是分配的意思。

kk_willbegood的博客 4555

NXP S32K3 FlexCAN驱动开发实战:从邮箱配置到总线通信优化

本文深入探讨NXP S32K3 FlexCAN驱动开发实战,涵盖从邮箱配置到总线通信优化的全流程。详细解析FlexCAN硬件架构、波特率精准配置、模块初始化步骤及邮箱操作技巧,助力开发者高效实现汽车级CAN通信,特别适用于车身控制模块和ADAS系统开发。

weixin_29190651的博客 467

以S32K3的MCU为例简单说明SPI和CAN配置常见问题

在调试车规MCU时,理解和解决SPI和CAN总线的配置问题至关重要。通过适当的硬件设计和软件配置,可以最大限度地提高系统的稳定性和可靠性,确保车辆电子系统的正常运行。详细的问题分析和实地测试是确保系统在各种操作条件下正常工作的关键步骤。

weixin_43199439的博客 1354
上一篇: hdu 2527 Safe Or Unsafe(哈夫曼编码)
下一篇: ZOJ 1011 NTA(二叉树+vector)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值