总结5..

 #include<stdio.h>

struct nb {//结构体列队

 int x, y;//x为横坐标,y为纵坐标

 int s, f;//s为步数,//f为方向

}link[850100];

int n, m, x, y, p, q, f;

int hard = 1, tail = 1;

int a[52][52], b[52][52], book[52][52][91];

int main()

{

 int i, j;

 scanf("%d %d", &n, &m);//输入矩阵大小

 for (i = 1; i <= n; i++)

  for (j = 1; j <= m; j++)

   scanf("%d", &a[i][j]);

 for(i=1;i<n;i++)//特殊处理只有4个格子组成的正方形都为0,机器人才能通过

  for (j = 1; j < m; j++)

  {

   if (a[i][j] == 0 && a[i][j + 1] == 0 && a[i + 1][j] == 0 && a[i + 1][j + 1] == 0)

    b[i][j] = 0;

   else

    b[i][j] = 1;

  }

 scanf("%d %d %d %d", &x, &y, &p, &q);//输入起点,终点

 getchar();

 scanf("%c", &f);//起始朝向

 if (x == p && y == q)//特判起点终点是否重合

 {

  printf("0");

  return 0;

 }

 //起始点入队

 link[tail].x = x; link[tail].y = y;

 link[tail].s = 0; 

 if (f == 'E') link[tail].f = 1;//f=1表示东方向,2表示南,3表示西,4表示北

 else if(f == 'S') link[tail].f = 2;

 else if (f == 'W') link[tail].f = 3;

 else link[tail].f = 4;

 book[x][y][link[tail].f] = 1; tail++;

 int flag = 0;//flag用于判断是否找到出口

 //广搜核心代码

 while (hard < tail)

 {

  //先广度搜索方向

  for (i = 0; i <= 1; i++)

  {

   int tf;

   if (i == 0)//0表示左转

   {

    tf = link[hard].f + 1;

    if (tf == 5)

     tf = 1;

   }

   else//右转

   {

    tf = link[hard].f - 1;

    if (tf == 0)

     tf = 4;

   }

   if (book[link[hard].x][link[hard].y][tf] == 0)//如果这个方向没有入队,进行入队操作

   {

    link[tail].x = link[hard].x;

    link[tail].y = link[hard].y;

    link[tail].s = link[hard].s + 1;

    link[tail].f = tf;

    book[link[hard].x][link[hard].y][tf] = 1;

    tail++;

   }

  }

  //广度搜索不同移动距离

  for (i = 3; i >= 1; i--)

  {

   int tx, ty;

   int fl = 0;//判断移动期间是否遇到障碍物,0为没有遇到

   if (link[hard].f == 1)//link[hard].f大小不同移动方向不同

   {

    tx = link[hard].x;

    ty = link[hard].y + i;

    if (tx<1 || tx>n - 1 || ty<1 || ty>m - 1)//是否越界

     continue;

    for (j = link[hard].y + 1; j <= ty; j++)//判断是否遇到障碍物

    {

     if (b[tx][j] == 1)

     {

      fl = 1;

      break;

     }

    }

   }

   else if (link[hard].f == 2)

   {

    tx = link[hard].x + i;

    ty = link[hard].y;

    if (tx<1 || tx>n - 1 || ty<1 || ty>m - 1)//是否越界

     continue;

    for (j = link[hard].x + 1; j <= tx; j++)//判断是否遇到障碍物

    {

     if (b[j][ty] == 1)

     {

      fl = 1;

      break;

     }

    }

   }

   else if (link[hard].f == 3)

   {

    tx = link[hard].x;

    ty = link[hard].y - i;

    if (tx<1 || tx>n - 1 || ty<1 || ty>m - 1)//是否越界

     continue;

    for (j = link[hard].y - 1; j >= ty; j--)//判断是否遇到障碍物

    {

     if (b[tx][j] == 1)

     {

      fl = 1;

      break;

     }

    }

   }

   else

   {

    tx = link[hard].x - i;

    ty = link[hard].y;

    if (tx<1 || tx>n - 1 || ty<1 || ty>m - 1)//是否越界

     continue;

    for (j = link[hard].x - 1; j >= tx; j--)//判断是否遇到障碍物

    {

     if (b[j][ty] == 1)

     {

      fl = 1;

      break;

     }

    }

   }

   if (book[tx][ty][link[hard].f] == 0 && fl == 0)//如果这个点的这个方向第一次遇到且到这个点期间没有遇到障碍物

   {

    //入队操作+标记

    link[tail].x = tx;

    link[tail].y = ty;

    link[tail].s = link[hard].s + 1;

    link[tail].f = link[hard].f;

    book[tx][ty][link[tail].f] = 1;

    tail++;

    if (tx == p && ty == q)//如果找到出口标记并提前结束

    {

     flag = 1;

     break;

    }

   }

  }

  hard++;//一个点广搜完,判断下一个点

  if (flag == 1)//找到出口,提前结束

   break;

 }

 if (flag == 1)//找到输出最短时间

  printf("%d", link[tail - 1].s);

 else//没找到输出-1

  printf("-1");

 return 0;

}

n 个人围成一圈,从第一个人开始报数,数到 mm 的人出列,再由下一个人重新从 11 开始报数,数到 mm 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号

#include <stdio.h>

int main() {

    int n, m;

    scanf("%d %d", &n, &m);

    int queue[1000];

    // 初始化队列,将1到n的人放入队列

    for (int i = 0; i < n; i++) {

        queue[i] = i + 1;

    }

    int front = 0;

    int rear = n;

    while (front < rear) {

        for (int i = 1; i < m; i++) {

            queue[rear] = queue[front];

            rear++;

            front++;

        }

        printf("%d ", queue[front]);

        front++;

    }

    return 0;

}

学了点动态规划和 记忆化,并做了几道相关的题,练习分叉树相关题

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙系统 将工程HarmonyOS变成OpenHarmony

DevEco Studio软件创建工程后需要修改两个地方&#xff1a; 修改第二个build-profile.json5文件 将原先内容&#xff1a; {"app": {"signingConfigs": [],"products": [{"name": "default","signingConfig": &q…

什么样的问题适合用递归

递归是一种通过函数调用自身来解决问题的方法。递归适用于那些可以被分解为相似子问题的问题&#xff0c;即原问题可以通过解决一个或多个更小规模的同类问题来解决。递归通常需要满足以下两个条件&#xff1a; 递归基&#xff08;Base Case&#xff09;&#xff1a;问题的最简…

C# 网络协议第三方库Protobuf的使用

为什么要使用二进制数据 通常我们写一个简单的网络通讯软件可能使用的最多的是字符串类型&#xff0c;比较简单&#xff0c;例如发送格式为(head)19|Msg:Heart|100,x,y,z…&#xff0c;在接收端会解析收到的socket数据。 这样通常是完全可行的&#xff0c;但是随着数据量变大&…

认识BOM

BOM 弹出层 可视窗口尺寸 屏幕宽高 浏览器内核和其操作系统的版本 剪贴板 是否允许使用cookie 语言 是否在线

国产编辑器EverEdit - 大纲视图

1 大纲视图 1.1 应用场景 在编辑较长代码文件时&#xff0c;使用大纲视图可以方便的检视当前文件的变量、函数等信息&#xff0c;方便在不同函数间跳转&#xff0c;对整个文档的全貌了然于胸。   在编辑XML文档时&#xff0c;通过展示XML文件的层次结构、节点布局&#xff0…

(2)STM32 USB设备开发-USB虚拟串口

例程&#xff1a;STM32USBdevice: 基于STM32的USB设备例子程序 - Gitee.com 本篇为USB虚拟串口教程&#xff0c;没有知识&#xff0c;全是实操&#xff0c;按照步骤就能获得一个STM32的USB虚拟串口。本例子是在野火F103MINI开发板上验证的&#xff0c;如果代码中出现一些外设的…

68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)

<?php // 声明命名空间&#xff0c;遵循 PSR-4 自动加载规范&#xff0c;命名空间为 Home\Controller namespace Home\Controller;// 导入 Think\Controller 类&#xff0c;以便扩展该类 use Think\Controller;// 定义 IndexController 类&#xff0c;继承自 Think\Control…

AutoGen入门——快速实现多角色、多用户、多智能体对话系统

1.前言 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 本文将以几个示例场景&#xff0c;使用AutoGen快速构建出…

阿九的python 爬虫进阶课18.3 学习笔记

文章目录 前言1. 爬取大标题2. 爬取小标题3. 证券栏下的标题4. 某篇文章里的具体内容 前言 网课链接&#xff1a;https://www.bilibili.com/video/BV1kV4y1576b/新浪财经网址&#xff1a;https://finance.sina.com.cn/需先下载库&#xff1a; conda install lxml布置爬取的一…

WGCAT工单系统部署教程

第一步、安装JDK WGCAT部署所在主机需要JDK环境&#xff08;JDK1.8、JDK11都可以&#xff09;&#xff0c;OpenJDK也可以&#xff0c;更高版本JDK也支持&#xff0c;一般推荐使用JDK1.8或JDK11 参考&#xff1a;linux CentOS系统安装jdk教程_centos安装jdk-CSDN博客 第二步、…

自动化01

测试用例的万能公式&#xff1a;功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能)&#xff0c;将产品的整体进行测试&#xff0c;人工创造一个自动化测试用例&#xff0c;在n个版本的时候…

Mysql触发器(学习自用)

一、介绍 二、触发器语法 注意&#xff1a;拿取新的数据时用new&#xff0c;旧数据用old。

python-leetcode-简化路径

71. 简化路径 - 力扣&#xff08;LeetCode&#xff09; class Solution:def simplifyPath(self, path: str) -> str:# 使用栈来处理路径stack []# 分割路径&#xff0c;以 / 为分隔符parts path.split(/)for part in parts:if part or part .:# 空字符串或 .&#xff0…

STMCubeMX配置STM32F103ZET6

1 配置时钟 配置RCC。 配置 SYS。将Timebase Source配置为TIM1, SysTick留给FreeRTOS用。 注意: 由于第一次配置的时候忘记配置这个步骤,导致工程第一次烧录成功后,后面一直无法烧录,报以下错误: keil no target connect Error: Flash Download failed - Target DLL h…

Yearning开源MySQL SQL审核平台

一款MYSQL SQL语句/查询审计工具&#xff0c;为DBA与开发人员使用. 本地部署&#xff0c;注重隐私&#xff0c;简单高效的MYSQL审计平台。 它可以通过流程审批&#xff0c;实现真实线上环境sql的审核和执行&#xff0c;还可以回滚执行&#xff0c;能够确保线上SQL更新的可靠性…

【TCP】rfc文档

tcp协议相关rfc有哪些 TCP&#xff08;传输控制协议&#xff09;是一个复杂的协议&#xff0c;其设计和实现涉及多个RFC文档。以下是一些与TCP协议密切相关的RFC文档列表&#xff0c;按照时间顺序排列&#xff0c;涵盖了从基础定义到高级特性和优化的各个方面&#xff1a; 基…

python进程池、线程池

Python广为使用的并发处理库futures使用入门与内部原理_concurrent.futures-CSDN博客 ThreadPoolExecutor(max_workers1) 池中至多创建max_workers个线程的池来同时异步执行&#xff0c;返回Executor实例、支持上下文&#xff0c;进入时返回自己&#xff0c;退出时调用 submit(…

人工智能之深度学习_[5]-神经网络优化学习率衰减优化正则化方法

文章目录 神经网络入门二3 神经网络优化方法3.1 梯度下降算法回顾3.2 反向传播&#xff08;BP算法&#xff09;3.2.1 反向传播概念3.2.2 反向传播详解 3.3 梯度下降优化方法3.3.1 指数加权平均3.3.2 动量算法Momentum3.3.3 AdaGrad3.3.4 RMSProp3.3.5 Adam3.3.6 小结 4 学习率衰…

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置

Prometheus部署及linux、mysql、monog、redis、RocketMQ、java_jvm监控配置 1.Prometheus部署1.2.Prometheus修改默认端口 2.grafana可视化页面部署3.alertmanager部署4.监控配置4.1.主机监控node-exporter4.2.监控mysql数据库mysqld_exporter4.3.监控mongod数据库mongodb_expo…

计算机网络介质访问控制全攻略:从信道划分到协议详解!!!

一、信道划分介质访问控制 介质访问控制&#xff1a;多个节点共享同一个“总线型”广播信道时&#xff0c;可能发生“信号冲突” 应该怎么控制各节点对传输介质的访问&#xff0c;才能减少冲突&#xff0c;甚至避免冲突? 时分复用(TDM) 时分复用&#xff1a;将时间分为等长的“…