笔记:代码随想录算法训练营day59:110.字符串接龙 、105.有向图的完全可达性、106.岛屿的周长

news2025/3/24 19:02:59

学习资料:代码随想录

110. 字符串接龙

卡码网题目链接(ACM模式)

还是有些许复杂,要把字符串从begin开始遍历,然后把每一个字母都换一下,看能否在字典里找到,如果能找到就入队列并记录,一直到最后。因为是广度优先,所以最先找到的就是最短的距离

#include <iostream>
#include <queue>
#include <unordered_map>
#include <unordered_set>
using namespace std;
 
int main(){
    int n;
    cin>>n;
    string beginStr,endStr;
    cin>>beginStr>>endStr;
 
    unordered_set<string> strList;
    string str;
    for(int i=0;i<n;i++){
        cin>>str;
        strList.insert(str);
    }
 
    queue<string> que;
    que.push(beginStr);
 
    unordered_map<string,int> visited;
    visited.insert(pair<string,int>(beginStr,1));
 
    while(!que.empty()){
        string curString = que.front();
        que.pop();
        int path = visited[curString];
        for(int i=0;i<curString.size();i++){
            string newWord=curString;
            for(int j=0;j<26;j++){
                char x=j+'a';
                newWord[i]=x;
                if(newWord==endStr){
                    cout<<path+1<<endl;
                    return 0;
                }
 
                if(strList.find(newWord)!=strList.end()&&visited.find(newWord)==visited.end()){
                    visited[newWord]=path+1;
                    que.push(newWord);
                }
            }
 
        }
    }
    cout<<0<<endl;
}

105.有向图的完全可达性

卡码网题目链接(ACM模式)

到有向图了,这道题其实还是搜索一遍看能不能搜索到

邻接表存储有向图

深搜处理当前节点:

#include <iostream>
#include <vector>
#include <list>
using namespace std;
 
void dfs(const vector<list<int>>& graph,vector<bool>& visited,int k){
    if(visited[k]==true) return;
    visited[k]=true;
    list<int> keys=graph[k];
    for(int key:keys){
        dfs(graph,visited,key);
    }
}
int main(){
    int n,k;
    cin>>n>>k;
    vector<list<int>> graph(n+1);
    int s,t;
    for(int i=0;i<k;i++){
        cin>>s>>t;
        graph[s].push_back(t);
    }
 
    vector<bool> visited(n+1,false);
    dfs(graph,visited,1);               //从1出发
 
    for(int i=1;i<n+1;i++){
        if(visited[i]==false){
            cout<<-1<<endl;
            return 0;
        }
    }
    cout<<1<<endl;
}

深搜处理下一节点

#include <iostream>
#include <vector>
#include <list>
using namespace std;
 
void dfs(const vector<list<int>>& graph,vector<bool>& visited,int k){
    list<int> keys=graph[k];
    for(int key:keys){
        if(visited[key]==false){
            dfs(graph,visited,key);
            visited[key]=true;
        }
    }
}
int main(){
    int n,k;
    cin>>n>>k;
    vector<list<int>> graph(n+1);
    int s,t;
    for(int i=0;i<k;i++){
        cin>>s>>t;
        graph[s].push_back(t);
    }
 
    vector<bool> visited(n+1,false);
    visited[1]=true;
    dfs(graph,visited,1);               //从1出发
 
    for(int i=1;i<n+1;i++){
        if(visited[i]==false){
            cout<<-1<<endl;
            return 0;
        }
    }
    cout<<1<<endl;
}

广搜:

#include <iostream>
#include <vector>
#include <list>
#include <queue>
using namespace std;
 
void bfs(const vector<list<int>>& graph,vector<bool>& visited,int k){
    queue<int> que;
    que.push(k);
    visited[k]=true;
    while(!que.empty()){
        int cur=que.front();
        que.pop();
        list<int> keys=graph[cur];
        for(int key:keys){
            if(visited[key]==false){
                que.push(key);
                visited[key]=true;      //谨记卡哥说的push后立马记录
            }
        }
    }
 
}
int main(){
    int n,k;
    cin>>n>>k;
    vector<list<int>> graph(n+1);
    int s,t;
    for(int i=0;i<k;i++){
        cin>>s>>t;
        graph[s].push_back(t);
    }
 
    vector<bool> visited(n+1,false);
 
    bfs(graph,visited,1);               //从1出发
 
    for(int i=1;i<n+1;i++){
        if(visited[i]==false){
            cout<<-1<<endl;
            return 0;
        }
    }
    cout<<1<<endl;
}

106. 岛屿的周长

卡码网题目链接(ACM模式)

并不需要深搜或广搜了,直接暴力

1、检查每一个陆地单元的靠水的边

#include <iostream>
#include <vector>
using namespace std;
int dir[4][2]={0,1,-1,0,0,-1,1,0};
 
int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<int>> fiji(n,vector<int>(m,0));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>fiji[i][j];
        }
    }
 
    int result =0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(fiji[i][j]==1){
                for(int k=0;k<4;k++){       //我怎么就想不到呢,每个节点都分别计算四个边啊
                    int xnext = i+dir[k][0];
                    int ynext = j+dir[k][1];
                    if(xnext<0||xnext>=fiji.size()||ynext<0||ynext>=fiji[0].size()||fiji[xnext][ynext]==0){
                        result++;
                    }
                }            
            }
        }
    }
    cout<<result<<endl;
}

2、先计算所有陆地单元的数量,然后减去重复周长

#include <iostream>
#include <vector>
using namespace std;
 
 
int main(){
    int n,m;
    cin>>n>>m;
    vector<vector<int>> fiji(n,vector<int>(m,0));
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>fiji[i][j];
        }
    }
 
    int sum=0;
    int repeat=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(fiji[i][j]==1){
                sum+=4;
                if(i-1>=0&&fiji[i-1][j]==1) repeat+=2;   //重复一次少的是两个边
                if(j-1>=0&&fiji[i][j-1]==1) repeat+=2;
                //只刨除上面和左面的重复部分,避免重复计算
            }
        }
 
    }
    int result = sum-repeat;
    cout<<result<<endl;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vite管理的Vue3项目中monaco editer的使用以及组件封装

文章目录 背景环境说明安装流程以及组件封装引入依赖封装组件 外部使用实现效果 v-model实现原理 背景 做oj系统的时候,需要使用代码编辑器,决定使用Monaco Editor&#xff0c;但是因为自身能力问题&#xff0c;读不懂官网文档&#xff0c;最终结合ai和网友的帖子成功引入&…

[笔记] TinyWebServer编译及demo运行过程

文章目录 前言环境搭建ubuntumysql 8.0c/c开启root用户TinyWebServer 搭建及编译过程运行结果常见问题./threadpool/../CGImysql/sql_connection_pool.h:6:10: fatal error: mysql/mysql.h: No such file or directory./server运行后直接退出了 前言 哎 也就帮帮新手看看问题 …

基于springboot的电影院管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 互联网技术的成熟和普及&#xff0c;势必会给人们的生活方式带来不同程度的改变。越来越多的经营模式中都少不了线上运营&#xff0c;互联网正强力推动着社会和经济发展。国人对民族文化的自信和不同文化的包容&#xff0c;再加上电影行业的发展&#xff0c;如此繁荣吸引…

虚拟电商-延迟任务系统的微服务改造(二)注册中心和Feign调用

一、微服务注册中心Consul 编写完延迟任务系统的web层接口&#xff0c;也就是说可以基于http协议来访问延迟系统&#xff0c;接下来要将延迟任务改造成一个服务。首要考虑的问题就是服务的注册与发现&#xff0c;服务的注册与发现都离不开服务的注册中心&#xff0c;本项目选取…

数智读书笔记系列022《算力网络-云网融合2.0时代的网络架构与关键技术》读书笔记

一、书籍核心价值与定位 1.1 书籍概述:中国联通研究院的权威之作 《算力网络 —— 云网融合 2.0 时代的网络架构与关键技术》由中国联通研究院算力网络攻关团队精心撰写,是业界首部系统性探讨云网融合 2.0 与算力网络的专著。在云网融合从 1.0 迈向 2.0 的关键节点,本书的…

第十六届蓝桥杯康复训练--6

题目链接&#xff1a;790. 数的三次方根 - AcWing题库 思路&#xff1a;二分&#xff0c;注意正负号和小数判断退出的方法&#xff08;虽然正负无所谓&#xff09; 代码&#xff1a; #include<bits/stdc.h> using namespace std;#define exs 0.00000018812716007232667…

logisim安装以及可能出现的问题

阅读提示&#xff1a;我这篇文章更偏向于安装出现问题的解决方案 目录 一、安装步骤 二、安装问题 1、出错的问题 2、出错的原因与解决方法 一、安装步骤 1、下载logisim 官方网站&#xff1a;https://sourceforge.net/projects/circuit/ 下载适用于你操作系统的版本&…

Servlet、HttpServletRequest、HttpServletResponse、静态与动态网页、jsp、重定向与转发

DAY15.2 Java核心基础 JavaWeb 要想通过浏览器或者客户端来访问java程序&#xff0c;必须通过Servlet来处理 没有Servlet&#xff0c;java是无法处理web请求的 Web交互&#xff1a; 接收请求HttpServletRequest&#xff1a;可以获取到请求的信息&#xff0c;比如uri&#…

hackmyvm-Icecream

arp-scan -l nmap -sS -v 192.168.222.106 enum4linux 192.168.222.106 445端口 smbmap -H 192.168.222.106 icecream为只读模式 smbclient \\192.168.222.106\icecream 反弹shell(上传put php-reverse-shell.php) 开启监听 nc -lnvp 1234 拿到webshell cat /etc/passwd 9000端…

告别低效人工统计!自动计算计划进度

实时监控任务进度一直是项目管理中的一项巨大挑战。 人工统计方式不仅耗时耗力&#xff0c;而且往往由于信息传递的延迟和人为误差&#xff0c;导致无法实时获得准确的项目进展信息。 这种不准确性可能掩盖潜在的风险点&#xff0c;从而影响项目的整体进度和成果。 Ganttable …

AI比人脑更强,因为被植入思维模型【16】反脆弱

毛选中就有言&#xff0c;不经历困难&#xff0c;我们就不会掌握战胜困难的方法。 这个世界纷繁复杂&#xff0c;不是强者总是运气好&#xff0c;而是他们能够失败后快速复原&#xff0c;不断找到战胜困难的方法。 定义 马斯洛需求层次模型是一种将人类需求从低到高按层次进…

L2TP实验

放开安全策略机制&#xff0c;FW1不配IP [FW1]firewall zone trust [FW1-zone-trust]add interface GigabitEthernet 1/0/0 [FW1]security-policy [FW1-policy-security]default action permit FW2 和FW3 [FW2]interface g1/0/1 [FW2-GigabitEthernet1/0/1]ip address 2…

【数据预测】基于遗传算法GA的LSTM光伏功率预测 GA-LSTM光伏功率预测【Matlab代码#91】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. 遗传算法GA2. 长短期记忆网络LSTM3. 基于GA-LSTM的光伏功率预测4. 部分代码展示5. 运行结果展示6. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 …

【记录一下】LMDeploy学习笔记及遇到的问题

LMDeploy 是一个用于大型语言模型&#xff08;LLMs&#xff09;和视觉-语言模型&#xff08;VLMs&#xff09;压缩、部署和服务的 Python 库。 其核心推理引擎包括 TurboMind 引擎和 PyTorch 引擎。前者由 C 和 CUDA 开发&#xff0c;致力于推理性能的优化&#xff0c;而后者纯…

HC-05与HC-06蓝牙配对零基础教程 以及openmv识别及远程传输项目的概述

这个是上一年的项目&#xff0c;之前弄得不怎么完整&#xff0c;只有一个openmv的&#xff0c;所以openmv自己去我主页找&#xff0c;这篇主要讲蓝牙 这个是我在使用openmv连接单片机1然后单片机1与单片机2通过蓝牙进行通信 最终实现的效果是&#xff1a;openmv识别到图形和数…

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测 目录 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预…

OpenLayers集成天地图服务开发指南

以下是一份面向GIS初学者的OpenLayers开发详细教程&#xff0c;深度解析代码&#xff1a; 一、开发环境搭建 1.1 OpenLayers库引入 <!-- 使用CDN引入最新版OpenLayers --> <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/ollatest/ol.c…

VBA-Excel

VBA 一、数据类型与变量 常用数据类型&#xff1a; Byte&#xff1a;字节型&#xff0c;0~255。Integer&#xff1a;整数型&#xff0c;用于存储整数值&#xff0c;范围 -32768 到 32767。Long&#xff1a;长整型&#xff0c;可存储更大范围的整数&#xff0c;范围 -214748364…

OpenHarmony 开源鸿蒙北向开发——linux使用make交叉编译第三方库

这几天搞鸿蒙&#xff0c;需要编译一些第三方库到鸿蒙系统使用。 头疼死了&#xff0c;搞了一个多星期总算搞定了。 开贴记坑。 一、SDK下载 1.下载 在linux下使用命令 wget https://cidownload.openharmony.cn/version/Master_Version/OpenHarmony_5.1.0.54/20250313_02…

【第14届蓝桥杯C/C++B组省赛】01串的熵

问题描述 算法思想 首先分析题目中给出的公式 S 100时&#xff0c;其信息熵为 H(S)−p(0)log2​(p(0)) − p(0)log2​(p(0)) − p(1)log2​(p(1)) 继续化简公式得 设0出现的次数为x&#xff0c;1出现的次数为3-x H(S)−x * p(0) * log2​(p(0)) − (3-x) * p(1) * log2​(p(1)…