总结3..

 #include<stdio.h>

int n,m;

int a[1002][1002];

int b[1002][1002];//判断该空的八连通图是否被走过 

int gg=0; 

int dd=0; 

int xz[8]={-1,-1,-1,0,0,1,1,1},yz[8]={-1,0,1,-1,1,-1,0,1};//八个方向 

void dfs(int x,int y)

{

 int dx,dy;

 for(int i=0;i<8;i++)

 {

   dx=x+xz[i];

   dy=y+yz[i];

  if(dx>=0&&dx<n&&dy>=0&&dy<m&&a[dx][dy]==0&&b[dx][dy]==0)

  {

   b[dx][dy]=1;

   dfs(dx,dy);

  }

 }

}

void ww(int x,int y)

{

 for(int i=0;i<8;i++)

 {

 int p=x+xz[i];

 int q=y+yz[i];

 if(p>=0&&p<n&&q>=0&&q<m&&a[p][q]!=-1)

 a[p][q]++; 

 }

}

int ff(int x,int y)

{

 for(int i=0;i<8;i++)

 {

  int xx=x+xz[i];

     int yy=y+yz[i];

   if(xx>=0&&xx<n&&yy>=0&&yy<m&&a[xx][yy]==0)

   return 0;

 } 

 return 1;

 

int main()

{

 int hh;

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

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

 {

  for(int j=0;j<m;j++)

  {

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

   if(a[i][j]==1)

   a[i][j]=-1;

  }

 }

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

 {

  for(int j=0;j<m;j++)

  {

  if(a[i][j]==-1)

  ww(i,j); 

  } 

 }

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

 {

  for(int j=0;j<m;j++)

  {

   if(a[i][j]!=0&&a[i][j]!=-1&&ff(i,j)) 

   dd++;

  } 

 } 

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

 {

  for(int j=0;j<m;j++)

  {

   if(a[i][j]==0&&b[i][j]==0)

   {

    gg++;

    dfs(i,j);

   }

  }

 }

 printf("%d",gg+dd);

 return 0;

}

 #include <stdio.h>

#include <string.h>

// 定义全局变量n和m,分别表示地图的行数和列数

// b数组用于标记每个位置是否已经被访问过,初始化为0表示未访问

// x1, y1, x2, y2 分别用于记录起点(Y)和终点(M)的坐标

int n, m, b[203][203] = {0}, x1, y1, x2, y2;

// 定义方向数组d,用于表示上下左右四个方向的偏移量

// 分别是向右(0, 1),向下(1, 0),向左(-1, 0),向上(0, -1)

int d[4][2] = { {0, 1}, {1, 0}, {-1, 0}, {0, -1}};

// 字符数组a用于存储地图信息

char a[203][203];

 

// 定义队列结构体,包含横坐标dx和纵坐标dy

struct queue {

    int dx;

    int dy;

} q[50000];

 

// 广度优先搜索函数,从坐标(x, y)开始进行搜索

// c数组用于记录从起点到各个位置的步数

void bfs(int x, int y, int c[][203]) {

    // 初始化队列的头指针f和尾指针r,f指向队列头部,r指向队列尾部的下一个位置

    int f = 0, r = 1;

    // 将起始点的坐标存入队列

    q[1].dx = x;

    q[1].dy = y;

    // 标记起始点已经被访问过

    b[x][y] = 1;

    // 当队列不为空时,进行循环

    while (f < r) {

        // 取出队列头部的点,头指针后移

        f++;

        // 计算当前位置下一步的步数,是当前位置的步数加1

        int s = c[q[f].dx][q[f].dy] + 1;

        // 尝试向四个方向进行扩展

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

            // 计算扩展后的新坐标

            int nx = q[f].dx + d[i][0];

            int ny = q[f].dy + d[i][1];

            // 判断新坐标是否在地图范围内,且未被访问过,并且不是障碍物('#')

            if (nx >= 0 && nx < n && ny >= 0 && ny < m && b[nx][ny] == 0 && a[nx][ny] != '#') {

                // 将新点加入队列,尾指针后移

                r++;

                // 标记新点已经被访问过

                b[nx][ny] = 1;

                // 将新点的坐标存入队列

                q[r].dx = nx;

                q[r].dy = ny;

                // 记录新点到起点的步数

                c[nx][ny] = s;

            }

        }

    }

}

 

int main() {

    // 当成功读取到地图的行数n和列数m时,进入循环

    while (scanf("%d %d", &n, &m) == 2) {

        // 读取地图的每一行信息

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

            scanf("%s", a[i]);

        }

        // 遍历地图,找到起点(Y)和终点(M)的坐标

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

            for (int j = 0; j < m; j++) {

                // 如果当前位置是起点(Y),记录其坐标

                if (a[i][j] == 'Y') x1 = i, y1 = j;

                // 如果当前位置是终点(M),记录其坐标

                else if (a[i][j] == 'M') x2 = i, y2 = j;

            }

        }

        // 定义两个二维数组c1和c2,分别用于记录从起点和终点到各个位置的步数,初始化为0

        int c1[203][203] = {0}, c2[203][203] = {0};

        // 重置访问标记数组b,将所有位置标记为未访问

        memset(b, 0, sizeof(b));

        // 从起点开始进行广度优先搜索,记录起点到各个位置的步数

        bfs(x1, y1, c1);

        // 再次重置访问标记数组b

        memset(b, 0, sizeof(b));

        // 从终点开始进行广度优先搜索,记录终点到各个位置的步数

        bfs(x2, y2, c2);

        // 初始化最小步数为一个较大的值

        int min = 100000;

        // 遍历地图,找到所有目标点('@'),并计算从起点和终点到该点的步数之和

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

            for (int j = 0; j < m; j++) {

                // 如果当前位置是目标点('@'),并且当前步数之和小于最小步数,且步数之和不为0

                if (a[i][j] == '@' && (min > c1[i][j] + c2[i][j]) && (c1[i][j] + c2[i][j])) {//标记那处非常关键

                    // 更新最小步数

                    min = c1[i][j] + c2[i][j];

                }

            }

        }

        // 输出最小步数乘以11的结果

        printf("%d\n", min * 11);

    }

    return 0;

}

 

#include<stdio.h>

int n,k,a[25]={0},cnt=0;

int p(int num){

 int z=1;

 if(num<2)z=0;

 for(int i=2;i*i<=num;i++){

  if(num%i==0){

   z=0;

   break;

  }

 }

 return z;

}

void dfs(int f,int num,int sum){

 if(num==0){

  if(p(sum))cnt++;

  return ;

 }

 if(n-f+1<num)return;

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

  dfs(i+1,num-1,sum+a[i]);

 }

}

int main()

{

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

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

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

 }

 dfs(1,k,0);

 printf("%d\n",cnt);

 return 0;

}

今天在洛谷练了几道搜索题,无习巩固了队列和站的相关知识点,回顾了一下归并算法和快速排序法

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…

LeetCode - #187 Swift 实现重复的DNA序列

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…

基于SpringBoot+Vue的智慧动物园管理系统的设计与实现

获取源码&#xff1a;基于SpringBootVue智慧动物园系统设计与实现: 后台和用户前台。后台包括首页、员工管理、考勤管理、部门管理、角色管理、审核管理、动物管理、演出管理、园区管理、园区设施维修、饲养管理、行为观察管理、疫苗管理、看护管理、个人中心、票务管理、收入管…

嵌入式硬件篇---PID控制

文章目录 前言第一部分&#xff1a;连续PID1.比例&#xff08;Proportional&#xff0c;P&#xff09;控制2.积分&#xff08;Integral&#xff0c;I&#xff09;控制3.微分&#xff08;Derivative&#xff0c;D&#xff09;控制4.PID的工作原理5..实质6.分析7.各种PID控制器P控…

【18】Word:明华中学-儿童医保❗

目录 题目​ NO2 NO3 NO4 NO5 NO6 NO7 NO8 NO9 题目 NO2 布局→页面设置对话框→纸张方向&#xff1a;横向→纸张大小&#xff1a;A3 &#xff1b;页面设置对话框&#xff1a;直接输入纸张大小的宽度和高度即可→页面设置对话框&#xff1a;上下左右边距→版式&…

【从零开始入门unity游戏开发之——C#篇46】C#补充知识点——命名参数和可选参数

考虑到每个人基础可能不一样&#xff0c;且并不是所有人都有同时做2D、3D开发的需求&#xff0c;所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】&#xff1a;主要讲解C#的基础语法&#xff0c;包括变量、数据类型、运算符、…

详解构造函数和析构函数

⼀个类&#xff0c;我们不写的情况下编译器会默认⽣成以下6个默认成员函数。 下面我们详细介绍的是构造函数和析构函数&#xff0c;它们的主要作用分别是初始化工作和清理工作。 构造函数 1、构造函数的概念 构造函数虽名里带着“构造”但是其实际上并不是说开辟空间创建对…

go语言zero框架通过chromedp实现网页在线截图的设计与功能实现

在 GoZero 框架中实现网页在线截图的功能&#xff0c;可以通过集成 chromedp 库来控制 Chrome 浏览器进行截图。chromedp 是一个基于 Chrome DevTools 协议的 Go 包&#xff0c;可以用来在 Go 程序中模拟浏览器操作&#xff0c;如页面截图、DOM 操作、表单提交等。 下面是一个…

【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】

本教程的知识点为&#xff1a; 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计&#xff1a; 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后…

HarmonyOS应用开发-低代码开发登录页面(超详细)

本篇文章我来手把手教大家做一个HarmonyOS 应用的登录页面&#xff0c;逐步讲解&#xff0c;非常细致&#xff0c;百分百能学会&#xff0c;并提供全部源码。页面使用 DevEco Studio 的低代码开发。 通过本文的实践经验&#xff0c;我想告诉大家&#xff0c; HarmonyOS 应用开发…

Reactive StreamsReactor Core

Reactive Streams&Reactor Core 一、概述1、问题2、优势3、发展 二、Reactive Streams1、依赖2、API 三、Project Reactor1、概述2、并发模型3、入门1&#xff09;依赖2&#xff09;Flux和Mono3&#xff09;空流&错误流 4、订阅响应式流1&#xff09;常见订阅2&#xf…

【数据分享】1929-2024年全球站点的逐日平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…

简单介绍JSONStream的使用

地址 作用 这个模块是根据需要筛选出json数据中自己所需要的数据 使用 var JSONStream require("JSONStream"); var parse require("fast-json-parse"); var fs require("fs");fs.createReadStream("./time.json").pipe(JSONSt…

信息奥赛一本通 1168:大整数加法

这道题是一道大整数加法&#xff0c;涉及到高精度的算法&#xff0c;比如说有两个数要进行相加&#xff0c;1111111111111111111111111111111111111112222222222222222222222222222222&#xff0c;那么如果这两个数很大的话我们常用的数据类型是不能进行计算的&#xff0c;那么…

架构思考与实践:从通用到场景的转变

在当今复杂多变的商业环境中&#xff0c;企业架构的设计与优化成为了一个关键议题。本文通过一系列随笔&#xff0c;探讨了业务架构的价值、从通用架构到场景架构的转变、恰如其分的架构设计以及如何避免盲目低效等问题。通过对多个实际案例的分析&#xff0c;笔者揭示了架构设…

[JavaScript] 运算符详解

文章目录 算术运算符&#xff08;Arithmetic Operators&#xff09;注意事项&#xff1a; 比较运算符&#xff08;Comparison Operators&#xff09;注意事项&#xff1a; 逻辑运算符&#xff08;Logical Operators&#xff09;短路运算&#xff1a;逻辑运算符的返回值&#xf…

Java测试开发平台搭建(九)前端

1. 搭建前端vue环境 Vue3 安装 | 菜鸟教程 2. 创建项目 1.进入ui vue ui 2. create项目 3. 成功之后添加插件&#xff1a; cli-plugin-router vue-cli-plugin-vuetify 4. 添加依赖 axios 5. 点击任务开始运行 如果报错&#xff1a; 修改vue.config.jsconst { defineConfig }…

【Linux系统编程】—— 深度解析进程等待与终止:系统高效运行的关键

文章目录 进程创建再次认识fork()函数fork()函数返回值 写时拷贝fork常规⽤法以及调用失败的原因 进程终⽌进程终止对应的三种情况进程常⻅退出⽅法_exit函数exit函数return退出 进程等待进程等待的必要性进程等待的⽅法 进程创建 再次认识fork()函数 fork函数初识&#xff1…

最新版Edge浏览器加载ActiveX控件技术——allWebPlugin中间件之awp_CreateActiveXObject接口用法

背景 ActiveXObject‌是JavaScript中的一个特殊对象&#xff0c;用于在Internet Explorer&#xff08;IE&#xff09;浏览器中创建和操作COM&#xff08;Component Object Model&#xff09;对象。COM是一种面向对象的软件组件技术&#xff0c;允许不同应用程序之间的互操作性。…

使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。

在上一篇博客中主要是使用SpringBootApache POI实现了BOM物料清单Excel表格导出&#xff0c;详见以下博客&#xff1a; Spring Boot Apache POI 实现 Exc&#xff08;&#xff09;el 导出&#xff1a;BOM物料清单生成器&#xff08;支持中文文件名、样式美化、数据合并&#…