http://acm.timus.ru/problem.aspx?space=1&num=1923 -- timus

This is s problem about thd dfs and searching like the leetcode islands problems

Creating three 2-D arrays: board, land(copy), visit.

board: the input, land:(0: undecided, 1: B country, 2: M country), visit

invading the land one by one.

for each fill, operation:

if land[i][j] = enemy return;

if land[i][j] = 0 && board[i][j] = alliance: land[i][j] = empire // 1 or 2

if land[i][j] = empire; check the neighbors of each location from board.

Heads-up: checking the boundary and visited(stack overflow)

import java.util.Scanner;

public class timus1923 {
static int visit[][] = new int[55][55];
//empire B: 1, M:2, a: original land, copy: terriority
static void fill(int x, int y, int alligance, int empire,int a[][], int copy[][],int n, int m){
if(x<0 || y<0 || x>=n || y>=m) return;//our of boundary
//check the empire board
if(visit[x][y] == 1) return;
visit[x][y] = 1;
int enemy = 0;
if(empire==1) enemy = 2;
else enemy =1; if(copy[x][y] == enemy) return;//enemy's land
if(copy[x][y]==0 && a[x][y] == alligance) copy[x][y] = empire;
if(copy[x][y]==empire) {
fill(x-1,y,alligance,empire,a,copy,n,m);
fill(x,y-1,alligance,empire,a,copy,n,m);
fill(x+1,y,alligance,empire,a,copy,n,m);
fill(x,y+1,alligance,empire,a,copy,n,m);
} }
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int a[][] = new int[n+1][m+1];
int copy[][] = new int[n+1][m+1];// emprire land
//int tag[] = new int[5]; for(int i = 0; i<n; i++){
String str = in.next();
for(int j = 0; j< m; j++){
a[i][j] = str.charAt(j)-'0';
//tag[a[i][j]] ++;
}
}
int l = in.nextInt();
int b[] = new int[l+1];
for(int i = 0; i<l; i++){
b[i] = in.nextInt();
}
int countB = 0;
int countM = 0;
copy[n-1][0] = 1;
copy[0][m-1] = 2;
//start from
fill(n-1,0,a[n-1][0],1,a,copy,n,m);
fill(0,m-1,a[0][m-1],2,a,copy,n,m); for(int i = 0; i<l; i++){
//init visi
for(int j = 0; j<55; j++){
for(int k = 0; k<55; k++){
visit[j][k] = 0;
}
} if(i%2==0){
fill(n-1,0,b[i],1,a,copy,n,m);
}else{
fill(0,m-1,b[i],2,a,copy,n,m);
}
}
for(int i =0; i<n; i++){
for(int j = 0; j<m; j++){
if(copy[i][j] == 1) countB++;
else if(copy[i][j] == 2) countM++;
}
} System.out.println(countB);
System.out.println(countM);
}
}

Life is funny.

1923. Scary Politics (timus) (dfs) search的更多相关文章

  1. dfs+search

    1.数的划分 点击查看搜索 #include<iostream> #include<cstdio> #include<cmath> #include<algo ...

  2. Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy

    1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...

  3. [LeetCode#212]Word Search II

    Problem: Given a 2D board and a list of words from the dictionary, find all words in the board. Each ...

  4. Leetcode: Android Unlock Patterns

    Given an Android 3x3 key ≤ m ≤ n ≤ , count the total number of unlock patterns of the Android lock s ...

  5. PE刷题记录

    PE刷题记录 PE60 / 20%dif 这道题比较坑爹. 所有可以相连的素数可以构成一张图,建出这张图,在其中找它的大小为5的团.注意上界的估算,大概在1W以内.1W内有1229个素数,处理出这些素 ...

  6. Android Unlock Patterns

    Given an Android 3x3 key lock screen and two integers m and n, where 1 ≤ m ≤ n ≤ 9, count the total ...

  7. Trie for string LeetCode

    Trie build and search class TrieNode { public: TrieNode * next[]; bool is_word; TrieNode(bool b = fa ...

  8. 582. Kill Process

    Problem statement: Given n processes, each process has a unique PID (process id) and its PPID (paren ...

  9. Leetcode: Closest Leaf in a Binary Tree

    Given a binary tree where every node has a unique value, and a target key k, find the value of the n ...

随机推荐

  1. HDU计算机学院大学生程序设计竞赛(2015’12)The Magic Tower

    Problem Description Like most of the RPG (role play game), “The Magic Tower” is a game about how a w ...

  2. shell入门基础必备

    作者:KornLee 2005-02-03 15:32:57 来自:Linux先生    1.建立和运行shell程序   什么是shell程序呢? 简单的说shell程序就是一个包含若干行 shel ...

  3. redis初识及基本操作

    一.redis介绍: 1.Redis是什么: REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key-Value) ...

  4. python模块之urllib

    python文档官网地址:https://docs.python.org/3.6/library/urllib.html?highlight=urllib urllib 是一个收集以下模块以处理URL ...

  5. 可视化开发_AppInventor2似乎被抛弃了

    工具 blockly google,mixly,scratch,app inventor2 的分别 可视化编程,青雀,来自 白鹭 没源码 如果想二次开发呢,初版拖拽控件生成,后期维护的时候找程序员加功 ...

  6. Silverlight 减小 Xap 的大小

    当Silverlight工程引用了很多dll后,加载的速度就会很慢,通过下面方式可以减小xap包的大小 勾选 “通过使用应用程序库缓存减小xap大小”,勾选此项后vs会自动将微软自身和外部引用不变的d ...

  7. UGUI 用脚本动态改变Button颜色组合

    public Button button; void Start() { ColorBlock cb = new ColorBlock(); cb.normalColor = Color.red; c ...

  8. MATLAB循环和函数定义,调用

    格式不要括号,最后有end for 循环变量 = 表达式1:表 2:表 3 表1:初值     表2:步长      表3:终值 求圆周率:π/4=1 - 1/3 + 1/5 -1/7+...+(-1 ...

  9. java语言编程实现两个时间相差多少天、多少小时、多少分、多少秒

    不多说,直接上干货! DateDistance.java package zhouls.bigdata.DataFeatureSelection.test; import java.text.Date ...

  10. JavaScript控制流及关键字与C语言之比较

    学习JavaScript控制流及关键字概念前,对有过C语言学习经验的同学来说,那么关键字,控制语句概念并不陌生.我们先来看看C语言吧: C语言的32个关键字和9种控制语句 9种控制语句: if.if- ...