Skip to content

Commit 1efaa18

Browse files
authored
Update 0105.有向图的完全可达性.md for java python and go
Update 0105.有向图的完全可达性.md for java python and go
1 parent f16c640 commit 1efaa18

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,10 +289,154 @@ 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

343+
``` python
344+
345+
def dfs(graph, key, visited):
346+
for neighbor in graph[key]:
347+
if not visited[neighbor]: # Check if the next node is not visited
348+
visited[neighbor] = True
349+
dfs(graph, neighbor, visited)
350+
351+
def main():
352+
import sys
353+
input = sys.stdin.read
354+
data = input().split()
355+
356+
n = int(data[0])
357+
m = int(data[1])
358+
359+
graph = [[] for _ in range(n + 1)]
360+
index = 2
361+
for _ in range(m):
362+
s = int(data[index])
363+
t = int(data[index + 1])
364+
graph[s].append(t)
365+
index += 2
366+
367+
visited = [False] * (n + 1)
368+
visited[1] = True # Process node 1 beforehand
369+
dfs(graph, 1, visited)
370+
371+
for i in range(1, n + 1):
372+
if not visited[i]:
373+
print(-1)
374+
return
375+
376+
print(1)
377+
378+
if __name__ == "__main__":
379+
main()
380+
381+
382+
```
383+
294384
### Go
295385

386+
```go
387+
388+
package main
389+
390+
import (
391+
"bufio"
392+
"fmt"
393+
"os"
394+
)
395+
396+
func dfs(graph [][]int, key int, visited []bool) {
397+
visited[key] = true
398+
for _, neighbor := range graph[key] {
399+
if !visited[neighbor] {
400+
dfs(graph, neighbor, visited)
401+
}
402+
}
403+
}
404+
405+
func main() {
406+
scanner := bufio.NewScanner(os.Stdin)
407+
scanner.Scan()
408+
var n, m int
409+
fmt.Sscanf(scanner.Text(), "%d %d", &n, &m)
410+
411+
graph := make([][]int, n+1)
412+
for i := 0; i <= n; i++ {
413+
graph[i] = make([]int, 0)
414+
}
415+
416+
for i := 0; i < m; i++ {
417+
scanner.Scan()
418+
var s, t int
419+
fmt.Sscanf(scanner.Text(), "%d %d", &s, &t)
420+
graph[s] = append(graph[s], t)
421+
}
422+
423+
visited := make([]bool, n+1)
424+
425+
dfs(graph, 1, visited)
426+
427+
for i := 1; i <= n; i++ {
428+
if !visited[i] {
429+
fmt.Println(-1)
430+
return
431+
}
432+
}
433+
fmt.Println(1)
434+
}
435+
436+
437+
```
438+
439+
296440
### Rust
297441

298442
### Javascript

0 commit comments

Comments
 (0)