在
的棋盘格状土地上盘踞着三个国家的若干股势力,上下左右相邻的属于同一个国家的土地被认为是同一股势力。现在想知道,土地上总共有多少股势力?
数据范围: 
要求:空间复杂度
, 时间复杂度 %20%5C)
要求:空间复杂度
第一行两个正整数,土地宽,长
;
接下来一个个矩阵,今包含
,表示土地上的国家分布。
一个正整数,势力股数。
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);
}
}