📅  最后修改于: 2023-12-03 15:28:44.682000             🧑  作者: Mango
本题为 2016 年的 GATE-CS 考试中的一道题目,共有两个部分。
第一部分要求编写一个程序,输入为一个字符串 S 和一个数字 n,输出为 S 的所有长度为 n 的子串。
例如,输入为 "hello" 和 2,输出为 "he","el","ll" 和 "lo"。
第二部分要求编写一个程序,输入为一个有向图的邻接矩阵,输出为该有向图的所有强连通分量。
# 题目简介
本题为 2016 年的 GATE-CS 考试中的一道题目,共有两个部分。
## 第一部分
第一部分要求编写一个程序,输入为一个字符串 S 和一个数字 n,输出为 S 的所有长度为 n 的子串。
### 代码示例
下面是一段 Python 代码,可以实现该功能:
```python
def get_substrings(s, n):
return [s[i:i+n] for i in range(len(s)-n+1)]
例如,输入 "hello" 和 2,输出为 ["he", "el", "ll", "lo"]。
第二部分要求编写一个程序,输入为一个有向图的邻接矩阵,输出为该有向图的所有强连通分量。
下面是一段 Python 代码,可以实现该功能:
def DFS(graph, visited, v, stack):
visited[v] = True
for i in range(len(graph)):
if graph[v][i] and not visited[i]:
DFS(graph, visited, i, stack)
stack.append(v)
def transpose(graph):
return [[graph[j][i] for j in range(len(graph))] for i in range(len(graph[0]))]
def SCC(graph):
stack = []
visited = [False]*len(graph)
for i in range(len(graph)):
if not visited[i]:
DFS(graph, visited, i, stack)
graph_T = transpose(graph)
visited = [False]*len(graph_T)
scc = []
while stack:
v = stack.pop()
if not visited[v]:
scc.append([])
DFS(graph_T, visited, v, scc[-1])
return scc
这段代码实现了 Tarjan 算法,用于查找有向图的所有强连通分量。可以通过传入邻接矩阵作为参数,返回一个列表,其中每个列表项都是一个强连通分量内的节点。
例如,输入邻接矩阵 [[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1],[1,0,0,0,0]],输出为 [[0, 4], [1], [2], [3]]。