当前位置: 首页 > news >正文

总结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;

}

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

 

 

 

http://www.lryc.cn/news/524413.html

相关文章:

  • Java 在包管理与模块化中的优势:与其他开发语言的比较
  • LLMs(大型语言模型)的多智能体:Auto-GPT
  • CPU狂飙900%如何分析?怎么定位?怎么溯源处理
  • Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)
  • Java中的阻塞队列--以LinkedBlockingQueue为例
  • 16.5万煤气柜柜位计故障分析
  • 高效沟通驱动LabVIEW项目成功
  • 大模型之三十三- 开源Melo 语音合成
  • 论文复现:四轮转向车辆后轮转角控制方法研究
  • 【UFEN】基于多层特征融合和多任务学习的多模态情感分析
  • uniapp的插件开发发布指南
  • 【Linux系统】—— 编译器 gcc/g++ 的使用
  • [微服务]注册中心优化
  • C++ ——— 模拟实现 vector 类
  • 大华相机DH-IPC-HFW3237M支持的ONVIF协议
  • 【Java】常用工具类方法:树形结构、获取IP、对象拷贝、File相关、雪花算法等
  • 豆瓣电影Top250的数据采集与可视化分析(scrapy+mysql+matplotlib)
  • 2024微短剧行业生态洞察报告汇总PDF洞察(附原数据表)
  • PHP语言的数据库交互
  • flutter跨端UI框架简介
  • 自动化标注平台开源,基于 yolov8标注平台可本地部署
  • Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能
  • 第35天:安全开发-JavaEE应用原生反序列化重写方法链条分析触发类类加载
  • 【mptcp】ubuntu18.04和MT7981搭建mptcp测试环境操作说明
  • 【数据分析(二)】初探 Pandas
  • 第9章:Python TDD解决货币对象相等性比较难题
  • 更新布局元素的属性
  • UDP協議與代理IP介紹
  • QT 中 UDP 的使用
  • leetcode刷题记录(七十二)——146. LRU 缓存