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

算法训练营第六十七天 | 卡码网110 字符串接龙、卡码网105 有向图的完全可达性、卡码网106 岛屿的周长

卡码网110 字符串接龙


这题一开始用的邻接表+dfs,不幸超时

#include <iostream>
#include <list>
#include <string>
#include <vector>
using namespace std;int minLen = 501;bool count(string a, string b) {int num = 0;for (int i = 0; i < a.length() && i < b. length(); i++) {if (a[i] != b[i]) {num++;if (num > 1) return false;}}return true;
}int dfs(string* s, vector<list<int>>& l, int* visited, int len, int index, int n) {if (index == n + 1) {if (minLen > len) minLen = len;return len;}int result = 501;for (auto it = l[index].begin(); it != l[index].end(); it++) {if (!visited[*it]) {visited[*it] = 1;result = dfs(s, l, visited, len+1, *it, n);visited[*it] = 0;}}return min(minLen, result);
}int main() {int n;cin >> n;string s[n+2];cin >> s[0] >> s[n+1];for (int i = 1; i <= n; i++) {cin >> s[i];}vector<list<int>> l(n+1);for (int i = 0; i <= n; i++) {for (int j = 1; j <= n+1; j++) {if (j != i) {if (count(s[i], s[j])) l[i].push_back(j);}}}int visited[n+2];for (int i = 0; i < n+2; i++) visited[i] = 0;visited[0] = 1;minLen =  dfs(s, l, visited, 1, 0, n);if (minLen == 501) cout << 0 << endl;else cout << minLen << endl;
}

题解中用的广搜,可以去看下,说是最短路径用深搜比较麻烦,要确定哪条最短,我确定出来了,但还是超时了。广搜只要搜到就一定是最短路径了,先放这。

卡码网105 有向图的完全可达性


这题就比较轻松了,深搜也不需要完全回溯,只需要遍历记录即可

代码如下:

#include <iostream>
#include <list>
#include <vector>
#include <queue>
using namespace std;void bfs(vector<list<int>>& l, vector<int>& visited, int index) {queue<int> myque;myque.push(index);while (!myque.empty()) {for (int i : l[index]) {if (!visited[i]) {visited[i] = 1;myque.push(i);}}myque.pop();}
}int main() {int n, k;cin >> n >> k;int s, t;vector<list<int>> l(n);for (int i = 0; i < k; i++) {cin >> s >> t;l[s-1].push_back(t-1);}vector<int> visited(n, 0);visited[0] = 1;bfs(l, visited, 0);for (int i = 0; i < n; i++) {if (!visited[i]) {cout << -1 << endl;return 0;}}cout << 1 << endl;return 0;
}

卡码网106 岛屿的周长


这题很简单,没用到dfs和bfs,简单填充边界后判断周围是否触碰边界后计数即可。

代码如下:

#include <iostream>using namespace std;int main() {int n, m;cin >> n >> m;int g[n][m];int sum = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> g[n][m];}}for (int i = 1; i < n - 1; i++) {for (int j = 1; j < m - 1; j++) {if (g[i][j] == 1) {if (g[i-1][j] == 0) sum++;if (g[i][j-1] == 0) sum++;if (g[i+1][j] == 0) sum++;if (g[i][j+1] == 0) sum++;}}}cout << sum << endl;
}

相关文章:

  • 【操作系统】第五章 文件系统
  • odoo的采购询价单,默认情况下显示‘draft‘,‘sent‘,‘purchase‘,请问什么情况下才会显示‘to approve‘?
  • clean code-代码整洁之道 阅读笔记(第十一章)
  • 静态ip详解
  • Android面试题精选——再聊Android-Handler机制
  • 分类接口开发
  • [SAP ABAP] 排序内表数据
  • 计组--存储系统--复习专用...
  • 【iOS】#include、#import、@class、@import
  • 2024广东省职业技能大赛云计算赛项实战——Minio服务搭建
  • CTFHUB-SSRF-端口扫描
  • DDMA信号处理以及数据处理的流程---cfar检测
  • 【database3】oracle:数据交换/存储/收集
  • Vite: 关于静态资源的处理机制
  • 计算机组成原理 —— 存储系统(DRAM和SRAM,ROM)
  • Akka系列(七):Actor持久化之Akka persistence
  • CentOS6 编译安装 redis-3.2.3
  • Flannel解读
  • in typeof instanceof ===这些运算符有什么作用
  • java小心机(3)| 浅析finalize()
  • PAT A1120
  • React16时代,该用什么姿势写 React ?
  • React-Native - 收藏集 - 掘金
  • Spring核心 Bean的高级装配
  • V4L2视频输入框架概述
  • vue总结
  • 初识 webpack
  • 大主子表关联的性能优化方法
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 嵌入式文件系统
  • 设计模式 开闭原则
  • 算法-插入排序
  • 我有几个粽子,和一个故事
  • #微信小程序(布局、渲染层基础知识)
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (C语言)字符分类函数
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)四层和七层负载均衡的区别
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net Core与存储过程(一)
  • .net mvc部分视图
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .Net6使用WebSocket与前端进行通信
  • .NET基础篇——反射的奥妙
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @软考考生,这份软考高分攻略你须知道
  • [Android] Amazon 的 android 音视频开发文档
  • [C++]拼图游戏
  • [dart学习]第四篇:函数
  • [HackMyVM]靶场 Wild