有一个人正试图在方板内部移动。木板是一个大小网格,其中点在其左上角,而点在其右下角。这个人只有遵循一些规则才能移动:
它将始终根据当前的风向移动(可能的方向是北,南,西,东,东北,西北,东南,西南)。 它只能访问董事会的特定单元一次。 它不能超出板的边界。 如果到达无法按照规则移动的点,它将停留在当前位置。 它只能移动到相邻的单元格(根据上述方向可能有8个移动)。 它将始终从该点(板的左上角)开始旅程。 它每秒只能移动一圈。 为了使他感到更困难,在旅途中风会多次改变方向。在男人开始移动之前(第0秒),您将始终得到风的方向,然后当风将要改变其方向时(以严格递增的顺序),您将获得以秒为单位的特定时间。
在完成了该人的所有旅程之后,您将必须指定该人没有在木板内部访问过多少个职位。
输入格式
在第一行中,您将获得两个整数'n'和'k',其中'n'代表电路板的尺寸。然后在接下来的“ k”行中,您将得到一个整数“ ti”和一个字符串“ w”。 'ti'表示在板上施加风向'w'的时间,以秒为单位.'w'的取值可能为N,S,W,E,NE,NW,SE或SW (分别代表北,南,西,东,东北,西北,东南或西南)。
约束
3 <= n <= 100000
2 <= k <= 100000
0 <= ti <= 100000
t0 = 0
输出格式
输出该板子中该人未访问的位置数。
样本输入0
5 6
0 SE
1个网元
2 E
6 SW
15 N
20瓦
样本输出0
13
public class Solution {
public static void main (String args []) {
//Table
int [][] board = new int [7][7];
// Seconds available for moving
int seconds = 43;
// Initial Man Coordinate
int Man = board [0][0];
// Two dimensional array to save the coordinates visited by the man
int [][] isVisited = new int [7][7];
// Formula to calculate the cells that are not visited by the man ( i know is wrong )
int notVisited = isVisited.isEmpty(true) - isVisited.isEmpty(false);
for (int i=0;i<=board.length;i++) {
for(int j=0;j<=board.length;j--) {
while (seconds < 4 ) {
i++;
j++;
Man = board [i][j];
//Here should be the code to save the coordinates visited by the man -->
答案 0 :(得分:1)
我首先要创建一个名为Board
的新呼叫:
public class Board {
private boolean[][] visited;
private int boardSize;
private int numVisited;
public Board(int boardSize) {
this.boardSize = boardSize;
visited = new boolean[boardSize][boardSize];
}
public void setVisited(int x, int y) {
if (!visited[x][y]) {
visited[x][y] = true;
numVisited++;
}
}
public int getBoardSize() {
return boardSize;
}
public int getNumVisited() {
return numVisited;
}
public int getNumNotVisited() {
return boardSize * boardSize - numVisited;
}
}
之后,您可以创建Board
Board myBoard = new Board(7);
然后按照您的逻辑,您可以通过调用setVisited
来设置要访问的单元格:
myBoard.setVisited(3, 3);
您可以通过调用countVisited
int numberOfVisitedCells = myBoard.getNumVisited();
或者,如果您想要尚未访问的单元数:
int numberofCellsNotVisited = myBoard.getNumNotVisited();
编辑:感谢@Matthew的改进!