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

总结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.kler.cn/a/513417.html

相关文章:

  • RV1126+FFMPEG推流项目(8)AENC音频编码模块
  • 成就与远见:2024年技术与思维的升华
  • 深入探索Python人脸识别技术:从原理到实践
  • 【json_object】mysql中json_object函数过长,显示不全
  • PHP语言的语法糖
  • 通过内核模块按fd强制tcp的quickack方法
  • 从零开始打造一个Java基于 Spring Boot 的旅游信息化平台
  • [已解决]chatgpt被降智了怎么办?(无法联网、识别图片、文件、画图)
  • cmake 可使用的构建系统
  • Java如何向http/https接口发出请求
  • C++模拟实现queue
  • 人工智能与量子计算:未来编程的碰撞与共鸣
  • 安装wxFormBuilder
  • Flutter调用HarmonyOS NEXT原生相机拍摄相册选择照片视频
  • 《Long Context Compression with Activation Beacon》笔记
  • mybatis(19/134)
  • 【HarmonyOS NEXT】华为分享-碰一碰开发分享
  • 初创企业或中小企业如何进行海外市场问卷调查?
  • HTML中的`<!DOCTYPE html>`是什么意思?
  • Java爬虫调用API时的异常处理策略
  • 算法---冒泡法
  • 推荐一个小而美的 Toast 插件 (一键复制使用)
  • Dart语言的学习路线
  • YOLOv10-1.1部分代码阅读笔记-dist.py
  • 61,【1】BUUCTF WEB BUU XSS COURSE 11
  • 大牙的2024年创作总结