当前位置: 首页 > 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;
}

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

相关文章:

  • 搭建 MySQL MHA
  • python中的线程与进程
  • 网络安全筑基篇——反序列化漏洞
  • 帝国cms定时审核并更新的方法
  • 一个简单好用安全的开源交互审计系统,支持SSH,Telnet,Kubernetes协议
  • 使用Spring Boot和WebSocket实现实时通信
  • 【Vue】集成富文本编辑器
  • 【论文阅读】--Popup-Plots: Warping Temporal Data Visualization
  • 重建大师引擎数0,本地引擎设置改不了,空三在跑,这样是正常的吗?
  • APM教程-SkyWalking安装和配置
  • 斯坦福大学 AI 研究部门推出的“7 周人工智能学习计划”
  • World of Warcraft [CLASSIC] plugin lua
  • 背靠广汽、小马智行,如祺出行打得过滴滴和百度吗?
  • CCSP自考攻略+经验总结
  • 面试突击:ArrayList源码详解
  • 力扣每日一题:2734. 执行子串操作后的字典序最小字符串
  • C++11中std::thread的使用
  • 酷瓜云课堂(内网版)v1.1.5 发布,局域网在线学习+考试系统
  • 大数据之Hadoop部署
  • Java异常处理中的“throw”与“throws”的区别
  • 英语智汇学习系统
  • ExtractAItoTEXT 提取Adobe illustrator AI文件中的文字到文本文件翻译并写回到Adobe illustrator AI文件
  • ms17-010 ms12-020 ms-08-067
  • 【海思Hi3403V100】多目拼接相机套板硬件规划方案
  • AI的赚钱风向,彻底变了!
  • 服务器重启后jenkins任务内容不见了,并且新建任务也不见了
  • 如何选择合适的WordPress主机?
  • 面试突击:Java 集合知识体系梳理
  • AI智能管理系统设计文档
  • 干涉阵型成图参数记录【robust】