在的棋盘格状土地上盘踞着三个国家的若干股势力,上下左右相邻的属于同一个国家的土地被认为是同一股势力。现在想知道,土地上总共有多少股势力?
数据范围:
要求:空间复杂度 , 时间复杂度
要求:空间复杂度 , 时间复杂度
第一行两个正整数,土地宽,长;
接下来一个个矩阵,今包含,表示土地上的国家分布。
一个正整数,势力股数。
4 4 1122 1222 3111 3333
4
111是1国的一块势力22222是2国一块势力33333是3国一块势力111是1国的另一块势力总共4块势力
2 2 11 11
1
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] params = br.readLine().trim().split(" "); int n = Integer.parseInt(params[0]); int m = Integer.parseInt(params[1]); char[][] grid = new char[n][m]; for(int i = 0; i < n; i++) grid[i] = br.readLine().trim().toCharArray(); int count = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++) if(grid[i][j] != '0') { count ++; dfs(grid, i, j, grid[i][j]); } } System.out.println(count); } private static void dfs(char[][] grid, int x, int y, char influence) { if(x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] == '0' || grid[x][y] != influence) return; grid[x][y] = '0'; dfs(grid, x + 1, y, influence); dfs(grid, x - 1, y, influence); dfs(grid, x, y + 1, influence); dfs(grid, x, y - 1, influence); } }
#include<iostream> #include<vector> #include<string> using namespace std; void dfs(vector<vector<char>> &grids, int x, int y, char target) { if (x < 0 || x >= grids.size() || y < 0 || y >= grids[0].size() || grids[x][y] != target) { return; } grids[x][y] = '#'; int incx[] = {-1, 1, 0, 0}; int incy[] = {0, 0, -1, 1}; for (int i = 0; i < 4; ++i) { dfs(grids, x + incx[i], y + incy[i], target); } } int main(){ int m, n; string tmp; cin >> m >> n; vector<vector<char>> grids(m, vector<char>(n)); for (int i = 0; i < m; ++i) { cin >> tmp; for (int j = 0; j < n; ++j) { grids[i][j] = tmp[j]; } } int res = 0; for (int i = 0; i < m; ++i) { for (int j = 0; j < n; ++j) { if (grids[i][j] != '#') { dfs(grids, i, j, grids[i][j]); res += 1; } } } cout << res; return 0; }
#include <iostream> #include <vector> #include <string> using namespace std; void bfs(int power, int i, int j, vector<vector<int>>& board, vector<vector<bool>>& seen) { if (i < 0 || i >= seen.size() || j < 0 || j >= seen[0].size()) { return; } if (seen[i][j] == 1) { return; } else { if (power == board[i][j]) { seen[i][j] = 1; bfs(power, i + 1, j, board, seen); bfs(power, i - 1, j, board, seen); bfs(power, i, j + 1, board, seen); bfs(power, i, j - 1, board, seen); } } } int main() { int ans = 0; int n, m; cin >> n >> m; vector<vector<int>> board(n, vector<int>(m)); for (int i = 0; i < n; i++) { string chess; cin >> chess; for (int j = 0; j < m; j++) { board[i][j] = chess[j] - '0'; } } vector<vector<bool>> seen(n, vector<bool>(m, 0)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (seen[i][j]) { continue; } else { bfs(board[i][j], i, j, board, seen); ans++; } } } cout << ans << endl; }
let line1 = readline().split(' ').map(Number); let n = line1[0], m = line1[1]; let lines = [], tmp; while(tmp = readline()){ lines.push(tmp.split('').map(Number)); } let count = 0; function dfs(lines, i, j, tmp){ if(i < 0 || i >= lines.length || j < 0 || j >= lines[0].length || lines[i][j] == 0 || lines[i][j] != tmp)return lines[i][j] = 0; dfs(lines, i, j+1, tmp); dfs(lines, i, j-1, tmp); dfs(lines, i+1, j, tmp); dfs(lines, i-1, j, tmp); } for(let i=0; i<n; i++){ for(let j=0; j<m; j++){ if(lines[i][j] != 0){ dfs(lines, i, j, lines[i][j]); count += 1; } } } console.log(count);
package main import ( "fmt" "strings" "strconv" ) func main(){ var n, m int fmt.Scan(&n) fmt.Scan(&m) fig := make([][]int, n) for i := range fig { var t string fmt.Scan(&t) t_new := strings.Split(t, "") temp := make([]int, m) for k := range t_new{ temp[k], _ = strconv.Atoi(t_new[k]) } fig[i] = temp } dict := make(map[int]bool) var trav func(x, y, num int) trav = func(x, y, num int) { if x < 0 || y < 0 || x >= n || y >=m || fig[x][y] != num { return } id := random(x,y) if dict[id] == true { return }else{ dict[id] = true } trav(x-1, y, num) trav(x+1, y, num) trav(x, y-1, num) trav(x, y+1, num) } r := 0 for i:=0;i<n;i++{ for j:=0;j<m;j++{ id := random(i, j) if dict[id] == true { continue }else{ r += 1 trav(i,j,fig[i][j]) } } } fmt.Print(r) } func random(x, y int) int { return x * 65555 - y*201 + x % (y+1) }
import java.util.*; public class Main{ static int ans[][]; static int n,m; public static void main(String args[]){ Scanner scan=new Scanner(System.in); n=scan.nextInt(); m=scan.nextInt(); int num=0; ans=new int[n+2][m+2]; for(int i=1;i<=n;i++){ String cur=scan.next(); for(int j=0;j<m;j++){ ans[i][j+1]=cur.charAt(j); } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(ans[i][j]!=0) {num++; dfs(i,j,ans[i][j]);} } } System.out.print(num); } public static void dfs(int i,int j,int curr){ if(i>n||i<1||j>m||j<1)return; if (ans[i][j]==0) return; if (curr!=ans[i][j]) return; ans[i][j]=0; dfs(i+1,j,curr); dfs(i-1,j,curr); dfs(i,j+1,curr); dfs(i,j-1,curr); } }
#include<bits/stdc++.h> using namespace std; void dfs(vector<vector<int>> &a, int x, int y, int val) { if(a[x][y] != val) return; a[x][y] = 0; if(x+1 < a.size()) dfs(a, x+1, y, val); if(y+1 < a[0].size()) dfs(a, x, y+1, val); if(x-1 >= 0) dfs(a, x-1, y, val); if(y-1 >= 0) dfs(a, x, y-1, val); } int main(){ ios::sync_with_stdio(0), cin.tie(0); int n, m; cin >> n >> m; vector<vector<int>> a(n, vector<int>(m)); for(int i=0; i<n; ++i){ string line; cin >> line; for(int j=0; j<m; ++j) a[i][j] = line[j] - '0'; } int res = 0; for(int i=0; i<n; ++i) for(int j=0; j<m; ++j){ if(a[i][j] ==0) continue; ++res; dfs(a, i, j, a[i][j]); } cout << res << endl; return 0; }
import java.util.Scanner; public class sanguodingli { static int[] x = new int[]{0,1,0,-1}; static int[] y = new int[]{1,0,-1,0}; public static int jayha(int n,int m,char[][] pro){ int res = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if(pro[i][j]!='-'){ printer(i,j,pro,pro[i][j]); res++; } } } return res; } public static void printer(int i,int j,char[][] pro,char ques){ //System.out.println(i+" "+j); pro[i][j] = '-'; for (int k = 0; k < 4; k++) { if(i+x[k]<pro.length&& j+y[k]<pro[0].length&& i+x[k]>=0&& j+y[k]>=0&& pro[i+1][j]== ques) printer(i+1,j,pro,ques); } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); char[][] pro = new char[m][n]; for (int i = 0; i < m; i++) { pro[i] = scanner.next().toCharArray(); } int jayha = jayha(n, m, pro); System.out.println(jayha); } }