Skip to content

Commit af5ce7d

Browse files
Merge pull request #2697 from sxdtywm/patch-5
Update 0105.有向图的完全可达性.md for java python and go
2 parents b829393 + 1efaa18 commit af5ce7d

File tree

1 file changed

+144
-0
lines changed

1 file changed

+144
-0
lines changed

problems/kamacoder/0105.有向图的完全可达性.md

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,55 @@ int main() {
289289

290290
### Java
291291

292+
```java
293+
294+
import java.util.*;
295+
296+
public class Main {
297+
298+
public static void dfs(List<List<Integer>> graph, int key, boolean[] visited) {
299+
for (int neighbor : graph.get(key)) {
300+
if (!visited[neighbor]) { // Check if the next node is not visited
301+
visited[neighbor] = true;
302+
dfs(graph, neighbor, visited);
303+
}
304+
}
305+
}
306+
307+
public static void main(String[] args) {
308+
Scanner scanner = new Scanner(System.in);
309+
int n = scanner.nextInt();
310+
int m = scanner.nextInt();
311+
312+
List<List<Integer>> graph = new ArrayList<>();
313+
for (int i = 0; i <= n; i++) {
314+
graph.add(new ArrayList<>());
315+
}
316+
317+
for (int i = 0; i < m; i++) {
318+
int s = scanner.nextInt();
319+
int t = scanner.nextInt();
320+
graph.get(s).add(t);
321+
}
322+
323+
boolean[] visited = new boolean[n + 1];
324+
visited[1] = true; // Process node 1 beforehand
325+
dfs(graph, 1, visited);
326+
327+
for (int i = 1; i <= n; i++) {
328+
if (!visited[i]) {
329+
System.out.println(-1);
330+
return;
331+
}
332+
}
333+
System.out.println(1);
334+
}
335+
}
336+
337+
338+
```
339+
340+
292341
### Python
293342
BFS算法
294343
```Python
@@ -327,8 +376,103 @@ if __name__ == "__main__":
327376

328377
```
329378

379+
``` python
380+
381+
def dfs(graph, key, visited):
382+
for neighbor in graph[key]:
383+
if not visited[neighbor]: # Check if the next node is not visited
384+
visited[neighbor] = True
385+
dfs(graph, neighbor, visited)
386+
387+
def main():
388+
import sys
389+
input = sys.stdin.read
390+
data = input().split()
391+
392+
n = int(data[0])
393+
m = int(data[1])
394+
395+
graph = [[] for _ in range(n + 1)]
396+
index = 2
397+
for _ in range(m):
398+
s = int(data[index])
399+
t = int(data[index + 1])
400+
graph[s].append(t)
401+
index += 2
402+
403+
visited = [False] * (n + 1)
404+
visited[1] = True # Process node 1 beforehand
405+
dfs(graph, 1, visited)
406+
407+
for i in range(1, n + 1):
408+
if not visited[i]:
409+
print(-1)
410+
return
411+
412+
print(1)
413+
414+
if __name__ == "__main__":
415+
main()
416+
417+
418+
```
419+
330420
### Go
331421

422+
```go
423+
424+
package main
425+
426+
import (
427+
"bufio"
428+
"fmt"
429+
"os"
430+
)
431+
432+
func dfs(graph [][]int, key int, visited []bool) {
433+
visited[key] = true
434+
for _, neighbor := range graph[key] {
435+
if !visited[neighbor] {
436+
dfs(graph, neighbor, visited)
437+
}
438+
}
439+
}
440+
441+
func main() {
442+
scanner := bufio.NewScanner(os.Stdin)
443+
scanner.Scan()
444+
var n, m int
445+
fmt.Sscanf(scanner.Text(), "%d %d", &n, &m)
446+
447+
graph := make([][]int, n+1)
448+
for i := 0; i <= n; i++ {
449+
graph[i] = make([]int, 0)
450+
}
451+
452+
for i := 0; i < m; i++ {
453+
scanner.Scan()
454+
var s, t int
455+
fmt.Sscanf(scanner.Text(), "%d %d", &s, &t)
456+
graph[s] = append(graph[s], t)
457+
}
458+
459+
visited := make([]bool, n+1)
460+
461+
dfs(graph, 1, visited)
462+
463+
for i := 1; i <= n; i++ {
464+
if !visited[i] {
465+
fmt.Println(-1)
466+
return
467+
}
468+
}
469+
fmt.Println(1)
470+
}
471+
472+
473+
```
474+
475+
332476
### Rust
333477

334478
### Javascript

0 commit comments

Comments
 (0)