diff --git a/week8/week8/.gitignore b/week8/week8/.gitignore new file mode 100644 index 0000000..f68d109 --- /dev/null +++ b/week8/week8/.gitignore @@ -0,0 +1,29 @@ +### IntelliJ IDEA ### +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/week8/week8/.idea/.gitignore b/week8/week8/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/week8/week8/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/week8/week8/.idea/inspectionProfiles/Project_Default.xml b/week8/week8/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..df543e3 --- /dev/null +++ b/week8/week8/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/week8/week8/.idea/kotlinc.xml b/week8/week8/.idea/kotlinc.xml new file mode 100644 index 0000000..506f8fd --- /dev/null +++ b/week8/week8/.idea/kotlinc.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/week8/week8/.idea/libraries/KotlinJavaRuntime.xml b/week8/week8/.idea/libraries/KotlinJavaRuntime.xml new file mode 100644 index 0000000..3e44d76 --- /dev/null +++ b/week8/week8/.idea/libraries/KotlinJavaRuntime.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/week8/week8/.idea/misc.xml b/week8/week8/.idea/misc.xml new file mode 100644 index 0000000..cf9abe6 --- /dev/null +++ b/week8/week8/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/week8/week8/.idea/modules.xml b/week8/week8/.idea/modules.xml new file mode 100644 index 0000000..b8960e9 --- /dev/null +++ b/week8/week8/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/week8/week8/.idea/vcs.xml b/week8/week8/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/week8/week8/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/week8/week8/src/main/kotlin/Main.kt b/week8/week8/src/main/kotlin/Main.kt new file mode 100644 index 0000000..2a82bc5 --- /dev/null +++ b/week8/week8/src/main/kotlin/Main.kt @@ -0,0 +1,83 @@ +import java.util.LinkedList +import java.util.Queue +import java.util.Scanner +import java.util.StringTokenizer +import kotlin.properties.Delegates + +lateinit var connected: Array> +lateinit var dfsVisited: Array +lateinit var visited: Array> +lateinit var apart: Array +val dx = arrayOf(0, 0, 1, -1) +val dy = arrayOf(1, -1, 0, 0) +var appartNum = 0 +var N = 0 + + +fun main() { + N = readLine()?.toInt() ?: return + val scanner = Scanner(System.`in`) + connected = Array(N){ Array(N) { 0 } } + visited = Array(N){ Array(N) { false } } + apart = Array(N*N){ 0 } + + for(i in 0 until N){ + val input = readLine() + for(j in 0 until N){ + connected[i][j] = input?.get(j)?.toString()?.toInt() ?: 0 + } + } + + for(i in 0 until N){ + for(j in 0 until N){ + if(connected[i][j] == 1 && !visited[i][j]){ + appartNum++ + BFS(i, j) + } + } + } + + apart.sort() + println("$appartNum") + + apart.forEach { v-> + if(v != 0) println(v) + } + +} + +fun BFS(x : Int, y : Int){ + val q: Queue = LinkedList() + q.add(intArrayOf(x, y)) + visited[x][y] = true + apart[appartNum]++ + + while(!q.isEmpty()){ + val curX = q.peek()[0] + val curY = q.peek()[1] + q.poll() + + for(i in 0 until 4){ + val nx = curX + dx[i] + val ny = curY + dy[i] + + if(nx >= 0 && ny >= 0 && nx < N && ny < N){ + if(connected[nx][ny] == 1 && !visited[nx][ny]){ + q.add(intArrayOf(nx, ny)) + visited[nx][ny] = true + apart[appartNum]++ + } + } + } + } +} +fun DFS(s : Int){ + if(dfsVisited[s]) return + dfsVisited[s] = true + print("$s ") + + connected[s].forEach { next-> + DFS(next) + } + +} \ No newline at end of file diff --git a/week8/week8/week8.iml b/week8/week8/week8.iml new file mode 100644 index 0000000..4eba30b --- /dev/null +++ b/week8/week8/week8.iml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file